您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:详解Python自动化之文件自动化处理

51自学网 2021-10-30 22:27:15
  python
这篇教程详解Python自动化之文件自动化处理写得很实用,希望能帮到您。

一、生成随机的测验试卷文件

假如你是一位地理老师, 班上有 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可以换成docxfile=glob.glob(os.path.join(path, "*.pdf"))count = 0for i in file:    count = count + 1    print(count)#复制文件的完整路径借助python对该文件夹的文件批量复制到另一个指定文件夹中。有两种模式,一种只复制文件。第二种复制文件的完整路径import osimport shutildef 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 filelistdef 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 filelistdef 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 zipfilefile=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, rewhile True:keyword = input("请输入你要删除的字符串:")if len(keyword)==0 or keyword.isspace():print("字符串不能为空!")else:breaksuffix = 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)。让该程序对所有后面的文件改名, 消除缺失的编号。作为附加的挑战,编写另一个程序,在一些连续编号的文件中,空出一些编号,以便加入新的文件。

到此这篇关于详解Python自动化之文件自动化处理的文章就介绍到这了,更多相关Python文件自动化处理内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


Python Pandas pandas.read_sql_query函数实例用法分析
python生成可执行exe控制Microsip自动填写号码并拨打功能
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。