Python文件操作
1、open函数
【例1-1】文件读写模式 w 、r 与 a
hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,正说反说不随便说,你敢听就来。\n\
大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,\n\
《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。"
# mode 读写模式,w只写,使用该模式时如果文件不存在时会创建文件,否则会清空文件,文件的指针默认在文件的开头
# file 文件路径 encoding 在写文件时为编码
f=open(file="话说明朝",mode="w",encoding="utf-8")
f.write(hsmc) # 写入文件
f.flush() # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close() # 关闭文件
# a 以追加写模式打开文件,如果文件不存在则创建,文件指针自动移到文件末尾
f=open(file="话说明朝",mode="a",encoding="utf-8")
f.write("\n追加写入")
f.flush() # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close() # 关闭文件
# r 只读,默认模式 encoding 在读文件时为解码,文件的指针默认在文件的开头
f=open(file="话说明朝",mode="r",encoding="utf-8")
print(f.read()) # 读取整个文件
f.close() # 关闭文件
返回结果:
大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,正说反说不随便说,你敢听就来。
大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,
《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。
追加写入
【例1-2】文件读写模式 r+
hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,正说反说不随便说,你敢听就来。\n\
大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,\n\
《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。"
# mode 读写模式,w只写,使用该模式时如果文件不存在时会创建文件,否则会清空文件,文件的指针默认在文件的开头
# file 文件路径 encoding 在写文件时为编码
f=open(file="话说明朝",mode="w",encoding="utf-8")
f.write(hsmc) # 写入文件
f.flush() # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close() # 关闭文件
# r+ 以读写模式打开文件,文件指针自动移到文件开头
f=open(file="话说明朝",mode="r+",encoding="utf-8")
f.write("文件开头") # 在文件开头处写入,会覆盖开头
f.seek(0) # 调整光标位置
print(f.read()) # 读取文件
f.flush() # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close() # 关闭文件
返回结果:
文件开头说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,正说反说不随便说,你敢听就来。
大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,
《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。
【例1-3】文件读写模式 a+
hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,正说反说不随便说,你敢听就来。\n\
大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,\n\
《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。"
# mode 读写模式,w只写,使用该模式时如果文件不存在时会创建文件,否则会清空文件,文件的指针默认在文件的开头
# file 文件路径 encoding 在写文件时为编码
f=open(file="话说明朝",mode="w",encoding="utf-8")
f.write(hsmc) # 写入文件
f.flush() # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close() # 关闭文件
# a+ 以追加读写模式打开文件,文件指针自动移到文件结尾
f=open(file="话说明朝",mode="a+",encoding="utf-8")
f.write("\n文件结尾") # 在文件开头处写入
f.seek(0) # 调整光标位置
print(f.read()) # 读取文件
f.flush() # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close() # 关闭文件
返回结果:
大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,正说反说不随便说,你敢听就来。
大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,
《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。
文件结尾
【例1-4】文件读写模式 wb 与 rb
hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!"
# mode 读写模式,wb只写,类似w,一般用于非文本文件
f=open(file="话说明朝",mode="wb") # 二进制文件不需要encoding
f.write(hsmc.encode("utf-8"))
f.flush() # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close() # 关闭文件
# mode 读写模式,rb只读,类似r,一般用于非文本文件
f=open(file="话说明朝",mode="rb") # 二进制文件不需要encoding
print(f.read())
f.flush() # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close() # 关闭文件
返回结果:
b'\xe5\xa4\xa7\xe5\xae\x87\xe8\x8c\xb6\xe9\xa6\x86\xe8\xaf\xb4\xe9\x80\x9a\xe5\x8f\xb2\xef\xbc\x8c\xe5\xac\x89\xe7\xac\x91\xe6\x80\x92\xe9\xaa\x82\xe8\xae\xb2\xe8\xaf\x84\xe4\xb9\xa6\xef\xbc\x81'
【文件打开模式完整列表】
模式 | 描述 |
---|---|
r | 以只读方式打开文件;指针默认在文件的开头,默认此模式。 |
rb | 以二进制格式、只读方式打开一个文件;指针默认在文件的开头,一般用于非文本文件。 |
r+ | 以读写方式打开文件;指针默认在文件的开头。 |
rb+ | 以二进制格式、读写方式打开一个文件;指针默认在文件的开头,一般用于非文本文件。 |
w | 以只写方式打开文件;如果文件存在则打开文件,并清空文件,如果文件不存在,创建新文件,指针默认在文件的开头。 |
wb | 以二进制格式、只读写方式打开一个文件;如果文件存在则打开文件,并清空文件,如果文件不存在,创建新文件,指针默认在文件的开头,一般用于非文本文件。 |
w+ | 以写读方式打开文件,如果文件存在则打开文件,并清空文件,如果文件不存在,创建新文件,指针默认在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 以追加写的方式打开文件;指针默认在文件的结尾,如果该文件不存在,创建新文件。 |
ab | 以二进制格式追加写的方式打开文件;指针默认在文件的结尾,如果该文件不存在,创建新文件。 |
a+ | 以追加读写的方式打开文件;指针默认在文件的结尾,如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式追加读写的方式打开文件;指针默认在文件的结尾,如果该文件不存在,创建新文件。 |
【例1-5】文件属性
# mode 读写模式,wb只写,类似w,一般用于非文本文件
f=open(file="话说明朝",mode="w",encoding="utf-8")
print(f.closed) # 判断文件是否关闭
print(f.name) # 获取文件的名字
print(f.mode) # 获取文件的访问模式
f.close() # 关闭文件
返回结果:
False
话说明朝
w
【例1-6】with
# with 会自动调用f.close() 并且还支持同时打开多个文件
with open(file="话说明朝",mode="w",encoding="utf-8") as f:
print(f.name) # 获取文件的名字
print(f.closed) # 判断文件是否关闭
返回结果:
话说明朝
True
【例1-7】文件指针
hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!"
# seek() 查看文件指针的位置,单位为字节
with open(file="话说明朝",mode="a+",encoding="utf-8") as f:
f.write(hsmc)
print(f.tell())
f.seek(5,0) # 第二个默认为0,相对文件开头的移动,第一个参数为偏移量
print(f.tell()) # 查看文件指针的位置
返回结果:
48
5
【例1-8】文件读取
hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,\n\
正说反说不随便说,你敢听就来。大宇话说系列第五部,话说明朝!\n\
本节目改编自当年明月著作《明朝那些事儿》,南明部分取自洪兵著作《南明那些事儿》,\n\
书籍已经多次再版,各位可自行购买正版书籍。"
with open(file="话说明朝",mode="w",encoding="utf-8") as f:
f.write(hsmc)
f.flush()
with open(file="话说明朝",mode="r",encoding="utf-8") as f:
for i in f: # 分行读取,迭代器的方式,方便读取大文件
print(i,end="")
print("\n"+"-"*120)
with open(file="话说明朝",mode="r",encoding="utf-8") as f:
print(f.readline()) # 读取一行,如果加参数读取指定字符,最多读取一行
f.seek(188) # 这里有一个问题如果放在字符中间会导致解码错误
print(f.readlines()) # 一次性读取文件的所有内容,并且返回一个列表
返回结果:
大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,
正说反说不随便说,你敢听就来。大宇话说系列第五部,话说明朝!
本节目改编自当年明月著作《明朝那些事儿》,南明部分取自洪兵著作《南明那些事儿》,
书籍已经多次再版,各位可自行购买正版书籍。
---------------------------------------------------------------------------------------------------------------------
大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,
['话说明朝!\n', '本节目改编自当年明月著作《明朝那些事儿》,南明部分取自洪兵著作《南明那些事儿》,\n', '书籍已经多次再版,各位可自行购买正版书籍。']
2、os模块
【例2-1】OS模块操作文件
import os
print(os.getcwd()) # 返回当前文件的目录地址
print(os.listdir()) # 返回当前目录的所有文件夹和文件
# os.remove("文件地址或文件名") # 删除文件,如果文件在当前目录可以直接用文件名
# os.removedirs("文件地址或文件名") # 删除空目录,如果待删除目录在当前目录可以直接用目录名
# os.path.isfile("文件地址或文件名") # 判断是否是文件
# os.path.isdir("文件地址或文件名") # 判断是否是目录
# os.path.isabs("文件地址") # 判断是否是绝对路径
# os.path.exists(r"文件地址") # 判断文件地址是否存在,取消转义
# 分离扩展名,返回元组
print(os.path.splitext(r"c:\Users\12246\Desktop\资料\index.html"))
# 分离最后一级文件地址,返回元组
print(os.path.split(r"c:\Users\12246\Desktop\资料\index.html"))
# 返回使用平台,Windows平台返回"nt",Linux/Unix平台返回"posix"
print(os.name)
# os.system("命令") # 执行shell命令
# a=os.path.getsize(r"文件地址") # 获取文件大小,注意文件大小,单位为字节
# os.mknod("红楼梦.txt") # Windows上的Python不支持mknod函数,会报错
os.mkdir("单级目录") # 创建单级目录,目录存在时报错
os.makedirs("t1/t2") # 创建单级目录,目录存在时报错
# os.stat("123") # 获取文件的属性,包括文件的大小等等
返回结果:
D:\Code\python练习\模块
['123', 'exercise.py', 'my_module.py', 'text', '__pycache__', '单级目录', '话说明朝']
('c:\\Users\\12246\\Desktop\\资料\\index', '.html')
('c:\\Users\\12246\\Desktop\\资料', 'index.html')
nt
【2-2】获取桌面路径(1)
# 通过注册表来获取当前windows桌面绝对路径,无需安装第三方库,推荐使用
import winreg
def desktopPath():
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,\
"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
return winreg.QueryValueEx(key, "Desktop")[0]
print("桌面路径:",desktopPath())
返回结果:
桌面路径: C:\Users\12246\Desktop
【2-3】获取桌面路径(2)
# 通过os模块获取,改变了桌面路径后,可能会失效。
import os
def desktopPath():
# os.path.join(path, *paths) 组合成一个新目录
return os.path.join(os.path.expanduser("~"), 'Desktop')
print("桌面路径:",desktopPath())
返回结果:
桌面路径: C:\Users\12246\Desktop
【2-4】计算目录下的所有文件和文件夹的数量和总大小( 递归可参考)
import os
size=0
fileNumber=0
dirNumber=0
def fileInfo(path):
global size # global修改全局变量
global fileNumber
global dirNumber
if os.path.isfile(path): # 判断是否是文件
fileNumber = fileNumber + 1 # 统计文件数量
size = size + os.path.getsize(path) # 统计文件总大小
else:
for list in os.listdir(path): # 目录下所有文件列表
joinPath = os.path.join(path, list) # 组合
if os.path.isfile(joinPath):
fileNumber = fileNumber + 1 # 统计文件数量
size = size + os.path.getsize(joinPath) # 统计文件总大小
elif os.path.isdir(joinPath):
dirNumber = dirNumber + 1 # 统计文件夹数量
fileInfo(joinPath) # 递归调用计算该文件夹下面的内容
# 文件地址
path=r"d:\英雄时刻"
fileInfo(path)
print("文件大小:"+str(size)+"B")
print("文件数量:"+str(fileNumber)+"个")
print("文件夹数量小:"+str(dirNumber)+"个")
返回结果:
文件大小:1874661880B
文件数量:7个
文件夹大小:4个
【2-5】修改文件
import os
hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史, \n\
正说反说不随便说,你敢听就来。大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,\n\
南明部分取自洪兵著作《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。"
with open("话说明朝","w",encoding="utf-8") as f: # 创建文件
f.write(hsmc)
with open("话说明朝","a+",encoding="utf-8") as f:
with open("话说明朝1", "w", encoding="utf-8") as fnew: # 同时打开两个文件
f.seek(0) # 注意文件指针这个坑
for i in f:
if "明" in i:
fnew.write(i.replace("明","日月")) # 替换字符
else:
fnew.write(i)
os.remove("话说明朝") # 删除原文件
os.renames("话说明朝1","话说明朝")
with open("话说明朝","r",encoding="utf-8") as f: # 创建文件
print(f.read())
返回结果:
大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,
正说反说不随便说,你敢听就来。大宇话说系列第五部,话说日月朝!本节目改编自当年日月月著作《日月朝那些事儿》,
南日月部分取自洪兵著作《南日月那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。