Datawhale-python自动化办公-task01

这篇博客介绍了如何使用Python进行文件操作,包括在写模式下打开文件的效果,read()和readlines()的区别。此外,重点展示了如何编写程序生成随机的地理测验试卷,包含多个选择题,每个题目的选项顺序随机,确保每份试卷的独特性。同时,还提供了两个实用程序,分别用于查找并复制特定扩展名的文件,以及查找并删除大于100MB的大文件。
摘要由CSDN通过智能技术生成

1.1.6练习

1、如果已有的文件以写模式打开,会发生什么?
写模式会删空文件,从头开始重新写入文件。


2、read()和readlines()方法之间的区别是什么?

read()函数直接读取txt文件的所有内容,其中换行以换行符\n表示。readlines()按行读取,并按照列表格式保存所有行。


综合练习: 一、生成随机的测验试卷文件 假如你是一位地理老师, 班上有 35 名学生, 你希望进行美国各州首府的一个 小测验。不妙的是,班里有几个坏蛋, 你无法确信学生不会作弊。你希望随机调整 问题的次序, 这样每份试卷都是独一无二的, 这让任何人都不能从其他人那里抄袭答案。当然,手工完成这件事又费时又无聊。 好在, 你懂一些 Python。

下面是程序所做的事:

• 创建 35 份不同的测验试卷。

• 为每份试卷创建 50 个多重选择题,次序随机。

• 为每个问题提供一个正确答案和 3 个随机的错误答案,次序随机。

• 将测验试卷写到 35 个文本文件中。

• 将答案写到 35 个文本文件中。

这意味着代码需要做下面的事:

• 将州和它们的首府保存在一个字典中。

• 针对测验文本文件和答案文本文件,调用 open()、 write()和 close()。

• 利用 random.shuffle()随机调整问题和多重选项的次序。

n = 60  # 60道题目
import random
QuestionsIndex = [i for i in range(60)]
content = dict()
#os.makedirs(os.path.join(os.getcwd(),"Questions"))  # 创建题目所需的文件夹
FilesPath = os.path.join(os.getcwd(),"Questions")
for i in range(60):
    content[i] = [i,random.random(),random.random(),random.random()]
PeopleNum = 35 # 学生人数
for j in range(PeopleNum):
    file = open(os.path.join(FilesPath,str(j)+'.txt'),'a')
    TempIndex = QuestionsIndex
    random.shuffle(TempIndex)
    for index in TempIndex:
        file.write(str(index)+"\n")
        TempContent = content[index]
        random.shuffle(TempContent)     # 打乱答案
        AnswerLine = ""
        for choose in TempContent:
            AnswerLine = AnswerLine + str(choose)+"     "
        file.write(AnswerLine+"\n")

1.2.4练习

1、编写一个程序,遍历一个目录树,查找特定扩展名的文件(诸如.pdf 或.jpg)。不论这些文件的位置在哪里, 将它们拷贝到一个新的文件夹中。

import os
import shutil
path = ''
path_copy = ''  # 新的文件夹

for folderName, subFolders,fileNames in os.walk(path):
    #print('The current folder is ' + folderName)
   	#for subFolder in subFolders:
    #    print('Subfolder of '  + folderName+':'+subFolder)
    for filename in fileNames:
        if filename.split(".")[1] == 'jpg':
            shutil.copy(os.path.join(folderName,filename),path_copy)
    #print('')   

2、一些不需要的、 巨大的文件或文件夹占据了硬盘的空间, 这并不少见。如果你试图释放计算机上的空间, 那么删除不想要的巨大文件效果最好。但首先你必须找到它们。编写一个程序, 遍历一个目录树, 查找特别大的文件或文件夹, 比方说, 超过100MB 的文件(回忆一下,要获得文件的大小,可以使用 os 模块的 os.path.getsize())。将这些文件的绝对路径打印到屏幕上。

import os
import shutil
import send2trash
path = ''
for folderName, subFolders,fileNames in os.walk(path):
    for subFolder in subFolders:
        foldersize = os.path.getsize(os.path.join(folderName,subFolder))
        if foldersize >10000000:
            print(os.path.join(folderName,subFolder))
            send2trash.send2trash(os.path.join(folderName,subFolder))
    for filename in fileNames:
        filesize = os.path.getsize(os.path.join(folderName,filename))
        
        if filesize >10000000:
            print(os.path.join(folderName,filename))
            send2trash.send2trash(os.path.join(folderName,filename))

3、编写一个程序, 在一个文件夹中, 找到所有带指定前缀的文件, 诸如 spam001.txt,spam002.txt 等,并定位缺失的编号(例如存在 spam001.txt 和 spam003.txt, 但不存在 spam002.txt)。让该程序对所有后面的文件改名, 消除缺失的编号。作为附加的挑战,编写另一个程序,在一些连续编号的文件中,空出一些编号,以便加入新的文件。

# 创建需要的txt文件
DigitList = [1,3,4,6,7]
os.chdir('')   # 改变当前工作路径
for i in DigitList:
    open(os.path.join(os.getcwd(),str(i)+'.txt'),'a')

PreFile = list()
for filename in os.listdir():
    if filename.endswith('.txt'):
        x = filename.split(".")[0]
        PreFile.append(int(x))
PreFile.sort()
for i in range(len(PreFile)):
    shutil.move(os.path.join(os.getcwd(),str(PreFile[i])+'.txt'),os.path.join(os.getcwd(),str(i+1)+'.txt'))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值