第八章 读写文件

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()函数读取文件内容:只返回一个字符串

python 斜线 Python斜线的画法_斜杠

调用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)

结果:

python 斜线 Python斜线的画法_斜杠_02

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)

结果:

python 斜线 Python斜线的画法_python_03


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. 项目及实践

下次复习阶段一起弄