博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

python文件操作

Posted on 2018-12-29 17:26  GraceNana  阅读(111)  评论(0编辑  收藏  举报

文件打开方式(mode):

r , rb(二进制)  只读(rb在读取非文本文件的时候,比如读取MP3,图像,视频等信息的时候)

w , wb(二进制)  只写

a , ab(二进制) 追加

r+ 读写   该模式下,必须是先读取,让后再写入,默认光标是在开头的,准备读取再写入,r+模式下读取内容,无论读取多少,光标显示的多少,在写入或者操作文件的时候都是在结尾进行的操作

w+,w+b 读写   先将所有内容清空.然后写入最后读取,一开始读不到数据

a+ 写读(追加写读) a+模式下,不论先读还是后读,都读不到数据

绝对路径和相对路径:

1.绝对路径 : 从磁盘根目录开始一直到文件名.

2.相对路径 : 同一个文件夹下的文件.相对路径可以直接使用文件名.如果是上一层文件夹.则要../

(推荐使用相对路径,方便传输项目文件给其他人)

文件操作实例:

文件读取

f = open("../def/哇擦.txt", mode="r", encoding="utf-8") 
#1 将文件全部读取出来
content = f.read()   #弊端占用内存过大,文件过大容易崩溃
#2 读取n个字符 
content = f.read(3)   #如果是rb,则读取的是n个字节
content2 = f.read(3)  #再读3个字节
#二进制读取
f = open("../def/哇擦.txt", mode="rb") 
content = f.read(3)  #结果b'\xe5\x8f\x8b'
f = open("../def/哇擦.txt", mode="r", encoding="utf-8") 
content = f.readline() .strip() # 一次读取一行数据

f = open("../def/哇擦.txt", mode="r", encoding="utf-8")
lst = f.readlines()       #每行形成一个元素,放到一个列表中,所有内容都读取出来

for line in f:    
    print(line.strip())   # 循环读取,不会产生内存溢出,推荐使用

f.flush() f.close() #文件读取之后文件句柄f一定关闭

 文件写入

f = open("a1.txt", mode="a", encoding="utf-8")
f.write("apple")    #追加写入
f.flush()
f.close()

其他操作

1. seek(n) 光标移动到n位置,移动单位是byte.utf-8的中文部分要是3的倍数

  移动到开头 : seek(0)

  移动到结尾 : seek(0,2)

2. tell() 获取光标的当前位置

3.truncate() 截断文件

修改文件

1 import os 
2 with open("a2.txt", mode="r", encoding="utf-8") as f1,\     
3     open("a2_new.txt", mode="w", encoding="UTF-8") as f2:    
4     for line in f1:        
5         new_line = line.replace("apple", "pear")        
6         f2.write(new_line) 
7     os.remove("a2.txt")    # 删除源⽂件 
8     os.rename("a2_new.txt", "a2.txt")     # 重命名新⽂件