这一节了解一下Python中的读写文件,Python 里的读写文件,就是用代码打开一个文件,把里面的内容读出来,或者把新的内容写进去,简单总结如下:
API:
1.import os 导入os模块,导入操作系统模块,提供路径、目录、文件相关操作。不导入会报NameError。
python
import os
脚本开头写import os,之后调用os.getcwd()。
2.os.path.join()拼接路径,自动适配操作系统路径分隔符,把多个片段拼接成完整路径字符串,Windows用\,Linux/macOS用/。
python
full_path = os.path.join("文件夹1","文件夹2","文件名")
os.path.join('C:\\Users','test.txt')
3.os.getcwd()获取当前工作目录,返回当前程序运行的工作目录绝对路径字符串。
python
current_path = os.getcwd()
print(os.getcwd())
4.os.chdir(path)修改当前工作目录,切换程序的当前工作目录;路径不存在抛出FileNotFoundError。
python
os.chdir("目标路径")
os.chdir('C:\\Users')
5.os.makedirs(path)创建多级文件夹,递归创建路径上全部文件夹,中间不存在的目录一并创建。
python
os.makedirs(r'C:\\a\\b\\c')
os.makedirs('data/log')
6.os.path.abspath(path)获取绝对路径,输入相对路径,返回对应的完整绝对路径字符串。
python
abs_path = os.path.abspath("./test.txt")
os.path.abspath('.')获取当前目录绝对路径。
7.os.path.isabs(path)判断是否为绝对路径,路径是绝对路径返回True,相对路径返回False。
python
res = os.path.isabs("路径")
os.path.isabs('./file.txt') → False
8.os.path.relpath(path,start)获取相对路径,返回从start起点到目标path的相对路径;省略start默认使用当前工作目录。
python
rel = os.path.relpath(target_path, start_path)
os.path.relpath('C:\\Windows','C:\\')
9.os.path.dirname(path)获取目录部分,返回路径最后一个分隔符前面的目录字符串。
python
dir_part = os.path.dirname("完整路径")
os.path.dirname(r'C:\\a\\b\\test.txt')
10.os.path.basename(path)获取文件名(基础名称),返回路径最后一个分隔符后面的文件名。
python
file_name = os.path.basename("完整路径")
os.path.basename(r'C:\\a\\b\\test.txt') → 'test.txt'
11.os.path.split(path)拆分目录与文件名,返回元组(目录部分,文件名),等价同时调用dirname+basename。
python
dir_part,file_part = os.path.split(path)
os.path.split(r'C:\\a\\test.txt')
12.os.path.getsize(path)获取文件字节大小,返回文件的字节数;传入文件夹会报错。
python
byte_num = os.path.getsize("文件路径")
os.path.getsize('test.txt')
13.os.listdir(path)获取目录下条目列表,返回该文件夹下所有文件、子文件夹名字符串列表,只返回名字,不是完整路径。
Kotlin
name_list = os.listdir("文件夹路径")
os.listdir('./data')
14.os.path.exists(path)判断路径是否存在,文件或文件夹存在返回True,不存在返回False。
python
is_exist = os.path.exists("路径")
os.path.exists('test.txt')
15.os.path.isfile(path)判断是否是文件,路径存在并且是普通文件返回True;文件夹/不存在返回False。
python
is_file = os.path.isfile("路径")
os.path.isfile('test.txt')
16.os.path.isdir(path)判断是否是文件夹,路径存在并且是文件夹返回True;文件/不存在返回False。
python
is_dir = os.path.isdir("路径")
os.path.isdir('./data')
17.open(path,mode)打开文件,返回File对象
python
file_obj = open("文件路径","模式")
f = open('hello.txt','r')
18.file.read()读取全部文件内容,一次性读取整个文件,返回完整大字符串;读完指针到文件末尾。
python
content_str = file_obj.read()
text = f.read()
19.file.readlines()读取所有行返回列表,读取文件每一行,返回字符串列表;每行末尾保留换行符\n。
python
line_list = file_obj.readlines()
lines = f.readlines()
20.file.write(string)向文件写入字符串,把字符串写入文件,返回写入字符数量;不会自动添加换行,需要手动加\n
python
write_count = file_obj.write("要写入文本\n")
f.write("Hello World\n")
21.file.close()关闭文件对象
python
file_obj.close()
22.import shelve shelve模块保存Python变量,二进制持久化模块,可以像字典一样读写Python变量,保存到磁盘shelf文件。
python
import shelve
shelf_file = shelve.open('mydata')
23.shelve.open(filename)打开shelf对象,打开shelf二进制存储文件,返回shelf对象,可读可写,类似字典。
python
shelf_obj = shelve.open("存储文件名")
s = shelve.open('mydata')
24.shelf.keys()/shelf.values()获取键、值
python
key_list = list(shelf_obj.keys())
list(s.keys())
25.import pprint 漂亮打印模块;pprint.pformat(),把列表/字典转为格式美观的Python源代码字符串,可以写入.py文件作为模块导入。
python
str_data = pprint.pformat(容器变量)
text = pprint.pformat([{'name':'Tom'}])
26.import shutil文件操作模块,高级文件/文件夹复制移动删除。
python
import shutil
shutil.copy('a.txt','dest/')
27.shutil.copy(source,dest)复制单个文件,复制源文件到目标路径;目标是文件夹就沿用原文件名,目标是文件名则重命名复制。
python
new_path = shutil.copy("源文件","目标")
shutil.copy('test.txt','backup/')
28.shutil.move(source,dest) 移动/重命名文件或文件夹
python
new_path = shutil.move("源","目标")
shutil.move('test.txt','backup/test.txt')
29.os.walk(top) 遍历目录树
python
for folder,subdirs,files in os.walk(root_path):
for foldername,subfolders,filenames in os.walk('./data'):
30.import zipfile zip压缩包模块,zipfile.ZipFile(),打开zip压缩归档文件;'w'写模式新建压缩包;'a'追加模式。
python
zip_obj = zipfile.ZipFile("xxx.zip","w")
z = zipfile.ZipFile('backup.zip','w')
栗子:
python
import os
file_path = "note.txt"
if not os.path.exists(file_path):
print(f"警告:{file_path} 文件不存在")
else:
f = open(file_path, 'r', encoding="utf-8")
line_list = f.readlines()
f.close()
print(f"总行数:{len(line_list)}")
print("====文件原始内容====")
for line in line_list:
print(line, end="")
f = open(file_path, 'a', encoding="utf-8")
f.write("\n这是追加的新一行文本\n")
f.close()
print("\n>>>已经追加完成!")
f = open(file_path, 'r', encoding="utf-8")
all_text = f.read()
f.close()
print("\n====追加之后完整内容====")
print(all_text)
demo2:
python
import os
import shelve
root_folder = "./"
txt_file_list = []
for foldername, subfolders, filenames in os.walk(root_folder):
for filename in filenames:
if filename.endswith(".txt"):
fullname = os.path.join(foldername, filename)
txt_file_list.append(fullname)
print(f"收集到txt文件共 {len(txt_file_list)} 个")
shelf = shelve.open("file_store")
shelf['txt_files'] = txt_file_list
shelf.close()
shelf_read = shelve.open("file_store")
result = shelf_read['txt_files']
shelf_read.close()
print("\n====从shelve读取保存的txt文件列表====")
for item in result:
print(item)