第八章 读写文件
1. 文件路径
文件的路径在Windows系统中路径书写为倒斜杠(\),在osX和Linux系统上为正斜杠(/)。
(1)可以使用os模块中的path.join()函数来返回一个适合运行环境的路径, 如:
import os
os.path.join(‘Users’,‘asweigart’,‘Documents’,‘project.docx’)
(2)获取和改变当前工作目录
函数 | 作用 | 示例 |
---|---|---|
os.getcwd() | 获得当前工作目录 | 直接调用即可 |
os.chdir() | 改变当前工作目录 | os.chdir(‘C:\\Users\\asweigart\\Documents’) |
ps.倒斜杠有两个,因为每一个倒斜杠需要一个另一个倒斜杠转义。
(3)相对路径和绝对路径
例如在有目录C:\Users\87124 ,且当前工作目录为C:\Users
绝对路径 | 相对路径 |
---|---|
C:\Users\87124 | .\87124 |
C:\ | ..\ |
C:\Users | .\ |
ps. 点(.)表示当前工作目录,点点(..)表示当前工作目录的上一级目录
(4)创建新目录
os.makedirs(‘C:\\Users\\asweigart\\Documents’)
这语句会直接创建路径C:\Users\asweigart\Documents,如果原来文件不存在此路径,这个函数就会在已有的路径之上添加缺失的部分。
(5)其他函数
函数 | 作用 |
---|---|
os.abspath(path) | 将相对路径path参数返回为一个绝对路径 |
os.path.isabs(path) | 判断一个path参数是否为绝对路径 |
os.path.relpath(path,start) | 返回一个从start路径到path路径的一个相对路径,start默认为当前工作路径 |
os.path.dirname(path) | 返回包含path参数中 最后一个斜杠之前的全部内容(路径) |
os.path.basename(path) | 返回包含path参数中最后一个斜杠之后的全部内容(文件或文件夹) |
os.path.split(path) | 返回一个分割最后一个斜杠前后的路径和文件的元组(两个字符串) |
os.path.sep | 文件路径的分割字符’\\’ |
os.path.getsize(path) | 返回path参数中文件(夹)的字节数(不包括里面放的文件) |
os.listdir(path) | 返回path参数下所有文件(夹)名字的一个字符串列表 |
os.path.exists(path) | 检查这个path参数是否存在 |
os.path.isfile(path) | 检查这个path参数是否为一个文件 |
os.path.isdir(path) | 检查这个path参数是否为一个文件夹 |
2. 读写文件
(1)打开文件
在对一个文件进行处理时,必须先要打开文件;使用open()函数,默认为只读模式打开文件(‘r’)。
File = open('C:\\Users\\87124\\Desktop\\hello.txt')
(2)读取文件
调用read()函数读取文件内容:只返回一个字符串
调用readlines()函数获取文件内容:返回按每行分割的列表
(3)写入文件
写模式:覆盖原有文件内容
添加模式:在已有文件内容后面添加新的文本
ps.如果文件不存在,则会创建一个新的文件
#写模式
File = open('C:\\Users\\87124\\Desktop\\hello.txt','w')
File.write('good monring !\n')
File.close()
File = open('C:\\Users\\87124\\Desktop\\hello.txt','r')
content = File.read()
print(content)
#添加模式
File = open('C:\\Users\\87124\\Desktop\\hello.txt','a')
File.write('boy')
File.close()
File = open('C:\\Users\\87124\\Desktop\\hello.txt','r')
content = File.read()
print(content)
结果:
3. shelve模块
导入shelve模块后,调用shelfFile = shelve.open()函数传入一个文件;
使用shelfFile[‘food’] =[‘apple’,‘banana’,‘water’]类似语句进行类似的键-值对赋值;最后在shelfFile上调用close()函数关闭文件。
ps.像字典一样,可以在shelfFile上调用keys()和values()函数
4. 实践项目——疯狂填词
题目:创建一个疯狂填词(Mad Libs)程序,它将读入文本文件, 并让用户在该文本文件中出现 ADJ、 N、 ADV 或 V 等单词的地方, 加上他们自己的文本。
import re
filename = input('Enter filename:\n')
# 读入文本文件
file = open(filename)
text = file.read()
file.close()
# 找到文中出现的单词,然后替换
textr = re.compile(r'ADJECTIVE|NOUN|ADVERB|VERB+').findall(text)
for names in textr:
if names[0] == 'A':
sub = input('Enter an %s:\n' % names)
else:
sub = input('Enter a %s:\n' % names)
text = re.sub(r'ADJECTIVE|NOUN|ADVERB|VERB+',sub,text,1)
# 保存为新的文本文件
file = open('new'+filename,'w')
file.write(text)
file.close()
# 打印
print(text)
结果:
ps.可惜
第九章 组织文件
1. shutil、os、send2trash模块及相关函数
函数 | 作用 |
---|---|
shutil.copy(source,destination) | 将source处的文件 复制到destination目录下,如果destination是一个文件,则重命复制的原文件 |
shutil.copytree(source,destination) | 作用类似,但这个函数是复制整个文件夹及其包含的所有文件夹和文件 |
shutil.move(source,destination) | 将source处的文件夹或文件移动到destination目录下,如果destination是一个文件,则重命移动的原文件 |
os.unlink(path) | 删除指定path参数处的文件 |
os.rmdir(path) | 删除指定path参数处的文件夹,但文件夹必须为空 |
shutil.rmtree(path) | 删除指定path参数处的文件夹,包含改文件夹内的所有内容 |
send2trash.send2trash(path) | 安全删除指定path参数处的文件夹,可以在回收站恢复 |
ps.copy()(复制)可以创建新的路径,但move()(移动)不行,move()函数会覆写重名文件,以及一个move()函数会出现没有扩展名的文件的问题
2. zipfile模块压缩文件
#读取和解压zip文件
import zipfile,os #导入模块
os.chdir('c:\\') #改变工作目录
exampleZip = zipfile.ZipFile('example.zip') #创建ZipFile对象,读取压文件必须
exampleZip.namelist() #查看压缩文件目录
spamInfo = exampleZip.getinfo('spam,txt') # 获取ZipFile对象下spam.txt文件的属性
spamInfo.file_size #该文件原始大小
spamInfo.compress_size #该文件压缩后大小
example.extractall() #解压example.zip下全部文件到当前工作目录
example.extract('spam.txt','C:\\Users') #解压example.zip下spam.txt文件到C:\Users路径
exampleZip.close #关闭ZipFile对象文件
#压缩文件
newZip = zipfile.ZipFile('new.zip','w') #以写模式打开一个新的ZipFile对象,'a'为添加模式
newZip.write('spam.txt',compress_type=zipfile.ZIP_DEFLATED) #将spam.txt文件压缩到new.zip文件中
newZip.close() #关闭ZipFile对象文件
3. 项目及实践
下次复习阶段一起弄