知识点:
1、如果已有的文件以写模式打开,会发生什么?
以写’w’模式打开,写入时会覆盖原有的文件;
以添加模式’a’打开,写入时会在已有文件的末尾添加文本。
2、read()和readlines()方法之间的区别是什么?
read() – 读取文件内容为一个字符串
readlines() – 按行读取文件内容,取得一个字符串列表,列表中的每个字符串是文本中的一行且以\n结束
综合练习: 一、生成随机的测验试卷文件 假如你是一位地理老师, 班上有 35 名学生, 你希望进行美国各州首府的一个 小测验。不妙的是,班里有几个坏蛋, 你无法确信学生不会作弊。你希望随机调整 问题的次序, 这样每份试卷都是独一无二的, 这让任何人都不能从其他人那里抄袭答案。当然,手工完成这件事又费时又无聊。 好在, 你懂一些 Python。
下面是程序所做的事:
• 创建 35 份不同的测验试卷。
• 为每份试卷创建 50 个多重选择题,次序随机。
• 为每个问题提供一个正确答案和 3 个随机的错误答案,次序随机。
• 将测验试卷写到 35 个文本文件中。
• 将答案写到 35 个文本文件中。
这意味着代码需要做下面的事:
• 将州和它们的首府保存在一个字典中。
• 针对测验文本文件和答案文本文件,调用 open()、 write()和 close()。
• 利用 random.shuffle()随机调整问题和多重选项的次序。
import random
capitals = {'Alabama': 'Montgomery', 'Alaska': 'Juneau', 'Arizona': 'Phoenix',
'Arkansas': 'Little Rock', 'California': 'Sacramento', 'Colorado': 'Denver',
'Connecticut': 'Hartford', 'Delaware': 'Dover', 'Florida': 'Tallahassee',
'Georgia': 'Atlanta', 'Hawaii': 'Honolulu', 'Idaho': 'Boise', 'Illinois':
'Springfield', 'Indiana': 'Indianapolis', 'Iowa': 'Des Moines', 'Kansas':
'Topeka', 'Kentucky': 'Frankfort', 'Louisiana': 'Baton Rouge', 'Maine':
'Augusta', 'Maryland': 'Annapolis', 'Massachusetts': 'Boston', 'Michigan':
'Lansing', 'Minnesota': 'Saint Paul', 'Mississippi': 'Jackson', 'Missouri':
'Jefferson City', 'Montana': 'Helena', 'Nebraska': 'Lincoln', 'Nevada':
'Carson City', 'New Hampshire': 'Concord', 'New Jersey': 'Trenton', 'New'
'Mexico': 'Santa Fe', 'New York': 'Albany', 'North Carolina': 'Raleigh',
'North Dakota': 'Bismarck', 'Ohio': 'Columbus', 'Oklahoma': 'Oklahoma City',
'Oregon': 'Salem', 'Pennsylvania': 'Harrisburg', 'Rhode Island': 'Providence',
'South Carolina': 'Columbia', 'South Dakota': 'Pierre', 'Tennessee':
'Nashville', 'Texas': 'Austin', 'Utah': 'Salt Lake City', 'Vermont':
'Montpelier', 'Virginia': 'Richmond', 'Washington': 'Olympia', 'West'
'Virginia': 'Charleston', 'Wisconsin': 'Madison', 'Wyoming': 'Cheyenne'}
# 随机生成35份试卷
for quizNum in range(35):
# 创建试卷和答案的txt文件
quizFile = open('CapitalQuiz%s.txt'%(quizNum+1),'w')
answerFile = open('CapitalQuizAnswers%s'%(quizNum+1),'w')
# 写入试卷抬头
quizFile.write('State Capital Quiz (Form %s)'%(quizNum+1))
quizFile.write('\n\n')
quizFile.write('Name\n\nDate:\n\nPeriod\n\n')
# 打乱州的顺序
states = list(capitals.keys())
random.shuffle(states)
# 循环50个州出题
for qNum in range(50):
# 获取正确答案
correctAns = capitals[states[qNum]]
# 排除正确答案,得到所有错误答案列表
wrongAns = list(capitals.values())
del wrongAns[wrongAns.index(correctAns)]
# 从列表中随机取三个作为最后的错误答案选项
wrongAns = random.sample(wrongAns,3)
AnsOptions = wrongAns+[correctAns]
random.shuffle(AnsOptions)
# 出题
quizFile.write('%s. What is the Capital of %s?\n'%(qNum+1,states[qNum]))
for i in range(4):
quizFile.write('%s. %s\n'%'ABCD'[i],AnsOptions[i])
quizFile.write('\n')
# 写入相应答案
answerFile.write('%s. %s\n'%(qNum+1,'ABCD'[AnsOptions.index(correctAns)]))
quizFile.close()
answerFile.close()
编写一个程序,遍历一个目录树,查找特定扩展名的文件(诸如.pdf 或.jpg)。不论这些文件的位置在哪里, 将它们拷贝到一个新的文件夹中。
import os
import shutil
# 原文件夹地址
path = '/Users/euphie_fuyy/Desktop/Datawhale/Practice/Pictures'
# 即将拷贝到的新文件夹地址
path_new = '/Users/euphie_fuyy/Desktop/Datawhale/Practice/Pictures_New'
for folderName, subFolders,fileNames in os.walk(path):
for fileName in fileNames:
if fileName.split('.')[-1] in ['jpg','png','jpeg']:
path_old = os.path.join(folderName,fileName)
shutil.copy(path_old,path_new)
print('已复制完成')
Reference:
DataWhale 自动化组队学习
os.path.getsize Returns Incorrect Value?
如何在 Mac 中隐藏文件或文件夹?