详解Python自动化之文件自动化处理


Posted in Python onJune 21, 2021

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

假如你是一位地理老师, 班上有 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)。让该程序对所有后面的文件改名, 消除缺失的编号。作为附加的挑战,编写另一个程序,在一些连续编号的文件中,空出一些编号,以便加入新的文件。

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

Python 相关文章推荐
Python中使用MELIAE分析程序内存占用实例
Feb 18 Python
举例介绍Python中的25个隐藏特性
Mar 30 Python
python利用matplotlib库绘制饼图的方法示例
Dec 18 Python
Python处理CSV与List的转换方法
Apr 19 Python
numpy.linspace 生成等差数组的方法
Jul 02 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
简单了解python中对象的取反运算符
Jul 01 Python
python多进程并行代码实例
Sep 30 Python
python 实现目录复制的三种小结
Dec 04 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 Python
Python基于traceback模块获取异常信息
Jul 23 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 #Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 #Python
浅谈Python从全局与局部变量到装饰器的相关知识
Jun 21 #Python
Python-OpenCV教程之图像的位运算详解
Python中的套接字编程是什么?
教你如何使用Python开发一个钉钉群应答机器人
详解Python requests模块
Jun 21 #Python
You might like
PHP生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
js倒计时小程序
2013/11/05 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
微信小程序 按钮滑动的实现方法
2017/09/27 Javascript
微信小程序使用字体图标的方法
2019/05/23 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
Python获取网页上图片下载地址的方法
2015/03/11 Python
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
初三化学教学反思
2014/01/23 职场文书
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
拓展训练激励口号
2014/06/17 职场文书
个人自我剖析材料
2014/09/30 职场文书
答谢词范文
2015/01/05 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
务工证明怎么写
2015/06/18 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
中学生打架《检讨书》范文
2019/08/12 职场文书
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电