1. 文件操作
open 打开
f = open(文件路径, mode=\"模式\", encoding=\"编码格式\") 最最底层操作的就是bytes
打开一个文件的时候获取到的是一个文件句柄.
绝对路径
从磁盘根目录开始寻找
相对路径
相对于当前程序所在的文件夹
../ 上一层文件
文件夹/ 进入xxx文件夹
1 f= open(\"D:\\西游记\\金角大王吧.txt\", mode=\"r\", encoding=\"gbk\") 2 print(f.read()) 3 f.close()
2. mode:
r: 读取,只读.
读取文件的相关操作
1. read()
默认: 读取文件内容(全部)
read(n) 读取n个字符
2. readline() 读取一行
3. readlines() 读取全部. 返回列表
(最重要)4. for line in f: 每次读取一行内容
1 f = open(\"moder.txt\", mode=\"r\", encoding=\"utf-8\") 2 print(f.read(5)) # 读取5个字符 3 print(f.read(5)) #继续读5个 4 print(f.readline().strip()) # 换行符为分割,strip()可以去掉换行. 读取到的内容第一件事就是去掉空白 5 print(f.readline()) 6 f.close() 7 8 print(f.readlines()) #一次性把文件中的内容读取到列表中 9 10 #文件句柄是一个可迭代对象 11 #优点:相对来说节省内存,操作相对简单一点 12 for line in f: # 从文件中读取到每一行给前面的line 13 print(line.strip()) 14 f.close()
w:
写入. 只写
创建文件
会清空文件
1 # 每次用w模式打开文件,都会清空这个文件(坑) 2 f = open(\'胡辣汤\', mode=\'w\', encoding=\"utf-8\") # 可以帮我们创建文件 3 4 f.write(\'河南特色\\n\') 5 f.write(\"东北特色\\n\") 6 f.write(\"陕西特色\\n\") 7 8 # 好习惯 9 f.flush() #刷新管道, 把数据写入文件 10 f.close()
a:
也可以创建文件
追加写
f = open(\"葫芦小金刚\", mode=\"a\", encoding=\"utf-8\") # a, append 追加, 在文件末尾写入内容 f.write(\"你叫什么名字阿?\") # f.read() #not readable f.flush() f.close()
r+: 对于文件而言. 应该有的操作就两个:读, 写
读写操作
1 f = open(\"葫芦小金刚\", mode=\"r+\", encoding=\"utf-8\") 2 content = f.read() # 顺序必须先读,后写 3 # r+特有的深坑:不论读取内容的是多少,只要你读了.写就是在末尾 4 f.write(\'五娃\') 5 print(content)
w+:
写读操作
1 # 一上来会清空文件, 没人用 2 f = open(\"葫芦小金刚\", mode=\"w+\", encoding=\"utf-8\") 3 # content = f.read() # 顺序必须先读,后写 4 # # r+特有的深坑:不论读取内容的是多少,只要你读了.写就是在末尾 5 # f.write(\'五娃\') 6 f.write(\"有能吐火的, 有能吐水的\") 7 # 移动光标 8 f.seek(0) # 移动到开头 9 s = f.read() 10 print(\"========>\", s)
a+:
追加写读
所有带b的表示直接操作的是bytes, 当处理非文本文件的时候.
# 追加写读, 光标在末尾. 所有的写都是在末尾
f = open(\"葫芦小金刚\", mode=\"a+\", encoding=\"utf-8\")
f.write(\"机械葫芦娃召唤神龙, 高喊. 我代表月亮消灭你!\")
f.seek(0)
s =f.read()
print(\"=====>\", s)
rb
wb
ab: 断点续传
r+b
w+b
a+b
3.文件复制
1 f1 = open(\"E:/1.png\", mode=\"rb\") 2 3 f2 = open(\"D:/1.png\", mode=\"wb\") 4 5 for line in f1: # line是从f1中读取的内容 6 f2.write(line) # 把读取的内容原封不动的写出去 7 8 f1.close() 9 f2.flush() 10 f2.close()
4.seek和tell
1 f = open(\"胡辣汤\", mode=\"r+\", encoding=\"utf-8\") 2 f.seek(0, 2) # 移动到末尾 3 # content = f.read() 4 # print(content) 5 # f.seek(0) # 移动到开头 6 # print(f.read()) 7 # print(f.tell()) # 字节 8 9 f.seek(3) 10 print(f.read())
5.文件修改
1 f = open(\"夸一夸alex\", mode=\"r\", encoding=\"utf-8\") 2 f2 = open(\"夸一夸alex_副本\", mode=\"w\", encoding=\"utf-8\") 3 4 for line in f: 5 if \"好人\" in line: 6 line = line.replace(\"好人\", \"sb\") 7 f2.write(line) 8 f.close() 9 f2.flush() 10 f2.close() 11 12 os.remove(\"夸一夸alex\") 13 14 os.rename(\"夸一夸alex_副本\", \"夸一夸alex\") 15 16 with open(\"夸一夸alex\", mode=\"r\", encoding=\"utf-8\") as f, \\ 17 open(\"夸一夸alex_副本\", mode=\"w\", encoding=\"utf-8\") as f2: 18 for line in f: 19 if \"好人\" in line: 20 line = line.replace(\"好人\", \"sb\") 21 f2.write(line) 22 23 os.remove(\"夸一夸alex\") 24 os.rename(\"夸一夸alex_副本\", \"夸一夸alex\")
6.水果统计
1 f = open(\"水果.txt\", mode=\"r\", encoding=\"utf-8\") 2 line = f.readline().strip() 3 = line.split(\",\") # [\'编号\',\'名称\',\'价格\',\'数量\',\'哈哈\'] 4 lst = [] 5 6 for line in f: # 1,香蕉, 1.85, 50 7 dic = {} # 每行都是一个字典 8 line = line.strip() # 去掉空白 \\n 1, 香蕉, 1.85, 50 9 data = line.split(\",\") # [1, 香蕉, 1.85, 50] 10 11 for i in range(len( )): 12 dic[ [i]] = data[i] 13 14 lst.append(dic) 15 16 print(lst)
继续阅读与本文标签相同的文章
Java开发笔记(三十三)字符包装类型
-
虚拟主机有什么优、缺点?
2026-05-19栏目: 教程
-
服务注册
2026-05-19栏目: 教程
-
服务器被攻击 如何查找漏洞以及攻击手法
2026-05-19栏目: 教程
-
Spring Cloud Zuul的动态路由怎样做?集成Nacos实现很简单
2026-05-19栏目: 教程
-
springboot自动配置原理
2026-05-19栏目: 教程
