文件读写
os
包命令
下表总结了os
包常用的命令:
- 工作目录相关命令
命令 | 功能 |
---|---|
os.getcwd() | 获取当前工作目录 |
os.chdir() | 改变当前工作目录 |
- 路径操作命令(实际上是对路径字符串的操作)
命令 | 功能 |
---|---|
os.path.abspath(path) | 将相对路径转换为绝对路径 |
os.path.isabs(path) | 判断是否为绝对路径 |
os.path.relpath(path,start) | 返回从start到path的相对路径 |
os.path.dirname(path) | 返回当前路径的目录名称 |
os.path.basename(path) | 返回当前路径的文件名称 |
os.path.split(FilePath) | 返回由目录名和文件名组成的元组 |
os.path.exists(path) | 判断是否存在path文件/文件夹 |
os.path.isfile(path) | 判断是否存在path文件 |
os.path.isdir(path) | 判断是否存在path文件夹 |
- 文件及文件夹操作
命令 | 功能 |
---|---|
os.makedir(newpath) | 创建新文件夹 |
os.path.getsize(path) | 返回path中文件的字节数 |
os.listdir(path) | 返回path中的文件/文件夹列表 |
- 永久删除文件和文件夹
命令 | 功能 |
---|---|
os.unlink(path) | 删除path处的文件 |
os.rmdir(path) | 删除path处的空文件夹 |
os.rmtree(path) | 删除path处的文件夹(包括其中的文件和文件夹) |
永久删除的文件无法从回收站恢复,因此可以考虑使用send2trash
模块安全地删除文件。
变量存储
利用shelve
模块可以将Python变量保存至二进制的shelf
文件。shelf
以类似字典的方式储存变量。
此外,可以结合pprint.pformat()
函数将变量写入.py
文件中,之后以模块的形式调用该变量。
组织文件
shutil
模块
shutil
模块中的函数可以在Python程序中复制、移动、改名和删除文件。
命令 | 功能 |
---|---|
shutil.copy(source, destination) | 将source处的文件复制到路径destination处的文件夹 |
shutil.copytree(source, destination) | 将source处的文件夹复制到路径destination处的新文件夹 |
shutil.move(source, destination) | 将source处的文件/文件夹移动到路径destination |
zipfile
模块
zipfile
模块中的函数可以创建和解压zip文件。
命令 | 功能 |
---|---|
zipfile.ZipFile(‘filename.zip’, ‘w’) | 以写模式创建一个压缩文件 |
newZip.write(‘filename’,‘compress_type=zipfile.ZIP_DEFLATED’) | 压缩指定路径的文件,添加到zip文件中 |
newZip.extractall(path) | 从zip文件中解压所有文件和文件夹,放到指定目录中 |
newZip.extract(‘filename’, path) | 将指定单个文件解压到指定路径的文件夹中 |
练习
1、已有文件以写模式打开,原来的内容会被覆盖。
2、read()
将文件的全部内容读取为一个字符串,而readlines()
则会逐行读取文件内容并形成字符串列表(字符串后保留换行符)。
综合练习
import random
import os
# 各州首府字典
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'
}
cap_state = list(capitals.keys())
cap_capital = list(capitals.values())
# 生成试题文件夹
os.makedirs('C:\\Users\\LWKM\\Desktop\\OfficeAutomation\\Task01 实验\\my_test_all')
os.makedirs('C:\\Users\\LWKM\\Desktop\\OfficeAutomation\\Task01 实验\\my_test_all\\my_problems')
os.makedirs('C:\\Users\\LWKM\\Desktop\\OfficeAutomation\\Task01 实验\\my_test_all\\my_answers')
# 生成试题集(含答案)
n_stu = 35
for i in range(n_stu):
# 生成题目字典
my_test = {}
select = ['A', 'B', 'C', 'D'] # 选项编号
# 遍历首府字典
for key,values in capitals.items():
# 生成选项列表
choice = [values]
temp = cap_capital.copy() # 注意copy的使用
temp.remove(values)
# 随机抽取3个非正确答案,填入选项列表中
choice.extend(random.sample(temp,3))
# 打乱顺序
random.shuffle(choice)
# 填入试题
my_test[key] = dict(zip(choice,select)) # 这里换一下顺序,方便答案的生成
# 打乱试题顺序
new_state = cap_state.copy() # 防止原始州列表顺序被打乱
random.shuffle(new_state)
# 写入新试题
my_test_new = {}
my_answer_new = {}
for st in new_state:
my_test_new[st] = my_test[st]
my_answer_new[st] = capitals[st]
with open(f'C:\\Users\\LWKM\\Desktop\\OfficeAutomation\\Task01 实验\\my_test_all\\my_problems\\student_{i+1}.txt', 'w') as f:
t = 0
for key, values in my_test_new.items():
t += 1
f.write(f"{t}. The capital of {key} is ____\n")
for k,v in values.items():
f.write(v+'. '+k+'\n')
f.write('\n')
with open(f'C:\\Users\\LWKM\\Desktop\\OfficeAutomation\\Task01 实验\\my_test_all\\my_answers\\student_{i+1}_answer.txt', 'w') as f:
s = 0
for key, values in my_answer_new.items():
s += 1
#f.write(f"{s}. The capital of {key} is [ {my_test_new[key][values]} ]")
f.write(f"{s}. {my_test_new[key][values]}")
f.write('\n')