详解Python自动化之文件自动化处理
作者:努力!才能被爱慕~ 发布时间:2022-07-24 03:50:02
一、生成随机的测验试卷文件
假如你是一位地理老师, 班上有 35 名学生, 你希望进行美国各州首府的一个小测验。不妙的是,班里有几个坏蛋, 你无法确信学生不会作弊。你希望随机调整问题的次序, 这样每份试卷都是独一无二的, 这让任何人都不能从其他人那里抄袭答案。当然,手工完成这件事又费时又无聊。
下面是程序所做的事:
• 创建 35 份不同的测验试卷。
• 为每份试卷创建 50 个多重选择题,次序随机。
• 为每个问题提供一个正确答案和 3 个随机的错误答案,次序随机。
• 将测验试卷写到 35 个文本文件中。
• 将答案写到 35 个文本文件中。
这意味着代码需要做下面的事:
• 将州和它们的首府保存在一个字典中。
• 针对测验文本文件和答案文本文件,调用 open()、 write()和 close()。
• 利用 random.shuffle()随机调整问题和多重选项的次序。
代码:
import random
#问题的数据保存在字典中,诗歌名称作为键,作者作为值。
poems={'1+3':'4',
'6+7':'13',
'9*3':'27',
'40-1':'39',
'38-13':'25'
}
#我们可以用上面的字典随机的出5份试卷
for num in range(5):
#创建试卷和答案文本文件
testFile = open('poem_test%s.txt' % (num + 1),'w')
answerFile = open('poem_answer%s.txt' % (num + 1),'w')
#创建试卷的头部格式
testFile.write('姓名:\n\n日期:\n\n年级:\n\n')
testFile.write('试卷号:%s' %(num + 1))
testFile.write('\n\n\n')
#随机获取诗歌名称
names = list(poems.keys())
random.shuffle(names)
#创建答案选项,这个for循环是要包含在上面一个for循环中的,因为哦们需要为每一个文件创建选项。
for questionNum in range(10):
#试卷的正确的选项,就是names列表中的值在字典中对应的作者
correctAnswer = poems[names[questionNum]]
#试卷的错误的选项,就是字典中所有的值
#然后在每次循环过程中去掉其中的正确的那一项,
wrongAnswers = list(poems.values())
del wrongAnswers[wrongAnswers.index(correctAnswer)]
#随机选择三个错误的答案
#random中sample(seq, n)函数:从序列seq中选择n个随机且独立的元素;
wrongAnswers = random.sample(wrongAnswers,3)
#问题单包含的四个选项
answerOptions = wrongAnswers + [correctAnswer]
#打乱答案顺序
random.shuffle(answerOptions)
#第四步:将内容写入测验试卷和答案文件
#将问题和答案写入文件中,\表示一行代码写不下可以换多行
testFile.write('%s,%s的答案是:\n' % \
(questionNum + 1,names[questionNum]))
for i in range(4):
testFile.write('%s. %s\n'%('ABCD'[i],answerOptions[i]))
testFile.write('\n')
#写入答案
answerFile.write('%s.%s\n' % (questionNum + 1,'ABCD'\
[answerOptions.index(correctAnswer)]))
testFile.close()
answerFile.close()
二、使用Python创建并写入新文件
本节将介绍如何用程序组织硬盘上已经存在的文件。不知你是否经历过查找一个文件夹,里面有几十个、几百个、甚至上千个文件,需要手工进行复制、改名、移动或压缩。比如下列这样的任务:
• 在一个文件夹及其所有子文件夹中,复制所有的 pdf 文件(且只复制 pdf 文件)
• 针对一个文件夹中的所有文件,删除文件名中前导的零,该文件夹中有数百个文件,名为 spam001.txt、 spam002.txt、 spam003.txt 等。
• 将几个文件夹的内容压缩到一个 ZIP 文件中(这可能是一个简单的备份系统)
所有这种无聊的任务,正是在请求用 Python 实现自动化。通过对电脑编程来完成这些任务,你就把它变成了一个快速工作的文件职员,而且从不犯错。
get_all_file_by_type() :根据接收到的path 和type,获得该path下所有以type类型结尾的文件
get_all_file_by_string(): 根据接收到的path 和 list, 获得该path下所有的,包含list 里字符串的文件
copy_file_by_type(): 根据接收到的old_path,和type,调用get_all_file_by_type()方法。根据条件选择不同的执行代码
copy_file_by_string():同理,不过它调用的是get_all_file_by_string()方法
#python创建并写入新文件,
#python统计特定文件夹下的word和pdf的数量
import glob,os
# path就是你说的特定文件夹
path = r"D:\linshi"
# 这里的pdf可以换成docx
file=glob.glob(os.path.join(path, "*.pdf"))
count = 0
for i in file:
count = count + 1
print(count)
#复制文件的完整路径借助python对该文件夹的文件批量复制到另一个指定文件夹中。有两种模式,一种只复制文件。第二种复制文件的完整路径
import os
import shutil
def get_all_file_by_type(path, type=()): # 获得以type类型结尾的所有文件,返回一个list
filelist = []
for a, b, c in os.walk(path):
for name in c:
fname = os.path.join(a, name)
if fname.endswith(type):
filelist.append(fname)
return filelist
def get_all_file_by_string(path, string_list):
filelist = []
for a, b, c in os.walk(path):
for name in c:
fname = os.path.join(a, name)
for string in string_list: # 遍历string_list,如果文件路径中包含string,那么append进filelist
if string in fname: # 如果只想要文件名符合条件,把fname换成name即可
filelist.append(fname)
break
return filelist
def copy_file_by_type(old_path, new_path, type=('doc', 'docx'), requird_dir=False):
try:
file_list = get_all_file_by_type(old_path, type=type) # 获得该路径下所有的type类型文件
if not os.path.exists(new_path): # 创建新的文件夹
os.makedirs(new_path)
if not requird_dir: # 如果仅复制文件
for file in file_list:
name = file.split("\\")[-1] # 获得文件名字
new_paths = os.path.join(new_path, name) # 与新路径拼接,获得完整的新路径
shutil.copy(file, new_paths)
print(new_paths + "成功")
if requird_dir:
for file in file_list:
name = file.split("\\")[-1] # 获得文件名字
new_paths = file.replace(old_path, new_path) # 将一个完整路径中,开始的路径替换成新的路径
dir = new_paths.split(name)[0] # 获得文件夹路径
if not os.path.exists(dir): # 创建新文件夹
os.makedirs(dir)
shutil.copy(file, new_paths)
print(new_paths + "成功")
except Exception as e:
print(e)
def copy_file_by_string(old_path, new_path, string_list, requird_dir=False):
try:
file_list = get_all_file_by_string(old_path, string_list=string_list) # 与上述一样,只不过这里调用的是get_all_file_by_string方法
if not os.path.exists(new_path):
os.makedirs(new_path)
if not requird_dir:
for file in file_list:
name = file.split("\\")[-1]
new_paths = os.path.join(new_path, name)
shutil.copy(file, new_paths)
print(new_paths + "成功")
if requird_dir:
for file in file_list:
name = file.split("\\")[-1]
new_paths = file.replace(old_path, new_path)
print(new_paths)
dir = new_paths.split(name)[0]
if not os.path.exists(dir):
os.makedirs(dir)
shutil.copy(file, new_paths)
print(new_paths + "成功")
except Exception as e:
print(e)
if __name__ == '__main__':
old_path = r"F:\aaaa"
new_path = r"F:\bbbb"
list = ["面试", "笔试", "题库", "题目"]
copy_file_by_string(old_path=old_path, new_path=new_path, string_list=list, requird_dir=False)
# type = ('docx','doc',"pdf","md")
# copy_file_by_type(old_path=old_path, new_path=new_path, type=type, requird_dir=True)
#python压缩多个文件到zip格式-zipfile包实例
pip install zipfile
file=r'D:\test.zip'
out_path=r'D:\files'
#遍历files文件夹下的文件,压缩发送
zip_1=zipfile.ZipFile(file,'w')
for f in os.listdir(out_path):
zip_1.write(os.path.join(out_path,f),f,zipfile.ZIP_DEFLATED)
zip_1.close()
#python批量删除文件名_Python批量修改文件名
import os, re
while True:
keyword = input("请输入你要删除的字符串:")
if len(keyword)==0 or keyword.isspace():
print("字符串不能为空!")
else:
break
suffix = input("需要筛选的文件名后缀(Enter代表所有):")
fileNames = os.listdir() #获取当前目录下的所有文件
for file in fileNames:
check = os.path.join(os.path.abspath('.'),file)
if os.path.isfile(check):
if len(suffix)==0 or suffix.isspace():
if keyword in file:
print(file," -> ",file.replace(keyword,''))
os.rename(file,file.replace(keyword,''))
else:
#用正则表达式匹配后缀名
if re.match('.+?\.'+suffix+'$',file) != None and keyword in file:
print(file," -> ",file.replace(keyword,''))
os.rename(file,file.replace(keyword,''))
1)、编写一个程序,遍历一个目录树,查找特定扩展名的文件(诸如.pdf 或.jpg)。不论这些文件的位置在哪里, 将它们拷贝到一个新的文件夹中。
2) 、一些不需要的、 巨大的文件或文件夹占据了硬盘的空间, 这并不少见。如果你试图释放计算机上的空间, 那么删除不想要的巨大文件效果最好。但首先你必须找到它们。编写一个程序, 遍历一个目录树, 查找特别大的文件或文件夹, 比方说, 超过100MB 的文件(回忆一下,要获得文件的大小,可以使用 os 模块的 os.path.getsize()
)。将这些文件的绝对路径打印到屏幕上。
3)、编写一个程序, 在一个文件夹中, 找到所有带指定前缀的文件, 诸如 spam001.txt,spam002.txt 等,并定位缺失的编号(例如存在 spam001.txt 和 spam003.txt, 但不存在 spam002.txt)。让该程序对所有后面的文件改名, 消除缺失的编号。作为附加的挑战,编写另一个程序,在一些连续编号的文件中,空出一些编号,以便加入新的文件。
来源:https://blog.csdn.net/weixin_43604754/article/details/117913382


猜你喜欢
- Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Py
- 使用Python3和Opencv识别一张标准的答题卡。大致的过程如下:1.读取图片2.利用霍夫圆检测,检测出四个角的黑圆位置,从确定四个角的
- 一个Link被点击之后有可能是打开新窗口,也有可能是刷新当前窗口,这两种打开方式一直并存于互联网中。 作为测试对象,于25日将打开方式改为‘
- 本文实例讲述了JS将滑动门改为选项卡(需鼠标点击)的实现方法。分享给大家供大家参考。具体如下:大家都知道,滑动门和选项卡在布局和结构方面几乎
- 本文实例讲述了JS实现控制表格内指定单元格内容对齐的方法。分享给大家供大家参考。具体如下:下面的代码控制表格单元格的内容向右对齐<!D
- reduce总的来说用的不多,但最近看一些文章上的reduce的用法真的是骚气,其实reduce跟常用的map,forEach一样,也是用于
- ueditor是百度编辑器,在本地的iis环境是可以上传图片了,但放在服务器的iis环境无法上传图片了,经过搜索发现是iis设置问题,引起这
- 简介短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串。早期短链接广泛应用于图片上传网站,通过缩短网址URL
- 由于最近有个任务需要在python环境下跑,项目是python3.6 + tensorflow1.3.1.现总结安装环境:卸载Python3
- 在这个情人节前夕,我把现任对象回收掉了,这段感情积攒了太多的失望,也给了我太多的伤害,所以我看到这个活动的第一反应是拒绝的。然而人生嘛,最重
- 本文实例讲述了python飞机大战pygame游戏背景设计。分享给大家供大家参考,具体如下:目标背景交替滚动的思路确定显示游戏背景01. 背
- 1. 一个指令定义对象可以提供如下几个钩子函数(均为可选)bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置
- 反射是在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类、方法、属性、参数等的详细信息,包括注释。这种动态获取的信息以及动态调用对象
- 我就废话不多说啦,还是直接看代码吧!list1 = [1,2,3,4]a,b,c,d = list1则a = 1b =2等这种方式只有当左边
- 问题:pycharm无法调用pip安装的包原因:pycharm没有设置解析器解决方法:打开pycharm->File->Sett
- 本文实例讲述了Python设计模式之享元模式原理与用法。分享给大家供大家参考,具体如下:享元模式(Flyweight Pattern):运用
- 本文实例为大家分享了python分割一个文本为多个文本,供大家参考,具体内容如下# load file# for each row## if
- 本文实例为大家分享了python实现超市管理系统的具体代码,供大家参考,具体内容如下这个相比上个程序简单很多,首先他没有太过复杂的逻辑关系,
- pyinstaller 属于Python第三方库,使用前需先安装# 首先安装pyinstallerpip install pyinstall
- 一、概述 变量在存储过程中会经常被使用,变量的使用方法是一个重要的知识点,特别是在定义条件这块比较重要。