Python笔记(五)--读写文件

这一节了解一下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)
相关推荐
破茧蝴蝶9 小时前
Python分布式爬虫完整教程
开发语言·python
benchmark_cc10 小时前
量化系统架构设计:为什么应该将数据获取与策略逻辑解耦?
python·数据分析·pandas·量化交易·股票数据·quantdash
凤山老林10 小时前
Spring Boot 启动冲刺:耗时剖析、懒加载策略与事件驱动初始化优化
spring boot·后端·python
小白快快跑哦10 小时前
python-字符串全解(六):正则表达式-逻辑运算或
python·正则表达式·字符串·逻辑运算
Thinker QAQ10 小时前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
hanlin0310 小时前
刷题笔记:力扣第32题-最长有效括号
笔记·算法·leetcode
道满科技11 小时前
Function Calling 参数总出错?只修参数就行
linux·windows·python
霸道流氓气质12 小时前
RAG 可观测性与生产监控实战:四层遥测模型、五大仪表盘与 OpenTelemetry 全链路追踪的 Java 生产级实现
java·人工智能·python
xian_wwq12 小时前
【学习笔记】Milvus 如何完成一次向量相似度检索,Milvus 索引到底应该怎么选?-15
笔记·学习·milvus