一, 对文件操作流程 1. 打开文件, 得到文件句柄并赋值给一个变量
2. 通过文件句柄对文件进行操作
3. 关闭文件
二, 文件打开模式
f = open("file_test","r",encoding = "utf-8") # 打开文件,"读模式", 只能读, 得到文件句柄并赋值给一个变量
print(f.read()) # 读文件所有内容, 读完之后文件光标跳到最后, 文件大时慎用
f.close()
f1 = open("file_test","w",encoding="utf-8") # 写模式, 会新建一个 file_test 文件, 再往里写入
f1.write("-------------")
f1.close()
f2 = open("file_test","a",encoding="utf-8") # 追加模式, 在原文件内容最后追加, 无原文件则新建
f2.write("-------------")
f2.close()
f3 = open("file_test","r+",encoding="utf-8") # 读写模式, 写在原文件内容最后追加, 无原文件则新建
print(f3.readline()) # 按行读
print(f3.readline())
print(f3.readline()) # 打印前三行, 这个时候光标移动到第三行位置
print(f3.tell()) # 打印光标位置
f3.write("--------------") # 但是写入还是文件内容最后写入
f3.close()
f4 = open("file_test","w+",encoding="utf-8") # 写读模式,, 只要是 "写在前" 都会建一个新文件, 在写入
f4.write("----------------------\n")
f4.write("----------------------\n")
f4.write("----------------------\n")
f4.seek(10) # 光标移动到 10 的位置
f4.write("test4") # 再写入会将原内容覆盖
f4.seek(0) # 将光标移动到开头的位置
print(f4.read())
f4.close()
# 输出
#----------ni hao -----
#----------------------
#----------------------
f5 = open("file_test","a+",encoding="utf-8") # 追加读模式, 在原文件内容最后追加, 无原文件新建
f5.write("----------------------\n")
f5.write("----------------------\n")
f5.write("----------------------\n")
f5.seek(10) # 光标移动到 10 的位置
f5.write("test5") # 再写入会在文件内容最后写入
f5.seek(0)
print(f5.read())
f5.close()
f6 = open("file_test","rb") # 以二进制文件格式读这个文件
print(f6.readline())
print(f6.readline())
print(f6.readline())
f6.close()
f7 = open("file_test","ab") # 以二进制文件格式追加这个文件
f7.write("-------------------\n".encode()) #encode 将 str 字符转换为 bytes
f7.write("-------------------\n".encode())
f7.write("-------------------\n".encode())
f7.close()
f8 = open("file_test","wb") # 以二进制文件格式写这个文件
f8.write("-------------------\n".encode()) #encode 将 str 字符转换为 bytes
f8.write("-------------------\n".encode())
f8.write("-------------------\n".encode())
f8.close()
# 注: 还有 rU 或 r+U 模式,"U" 表示在读取时, 可以将 \r \n \r\n 自动转换成 \n (与 r 或 r+ 模式同使用)
三, 文件循环
# 按行循环, 并且将第五行替换
f = open("file_test","r",encoding="utf-8")
count = 0
for line in f:
count += 1
if count == 5:
print("---- 分割线 ----")
continue
print(line.strip()) #strip 是去除行首行尾的空格符和换行符
f.close()
#f.readlines() # 切记用 f.readlines 是先将文件转换为列表, 如果文件太大时对内存消耗太大
四, 文件的修改
# 打开一个文件, 修改完了写到一个新文件
f = open("file_test","r",encoding="utf-8")
f_new = open("file_new","w",encoding="utf-8")
for line in f: # 按行取出, 每行都是一串字符串
if "fengxiaoli" in line:
line = line.replace("fengxiaoli","FENGXIAOLI") # 对字符串进行操作, J
f_new.write(line)
f.close()
f_new.close()
五, flush 方法
f = open("file_test", "w", encoding = "utf-8") f.write("hello\n") f.write("hello\n") f.write("hello\n") f.flush() #当往文件写内容的时候,
会有一个缓存,
达到一个时间,
一次往文件写入.如果这时候断电可能内容并没有写入成功,
flush刷新会立即执行
六, with 语句
#with 语句作用, 为了避免打开文件后忘记关闭
with open("file_test","r",encoding="utf-8") as f: # 类似于 f = open("file_test","r",encoding="utf-8")
with open("file_test","r",encoding="utf-8") as f, \ # 还可以同时打开多个文件
open("file_test2","r",encoding="utf-8") as f2:
七, 其他操作
f = open("file_test","r",encoding="utf-8")
print(f.tell()) # 打印光标位置, 按字符计数
print(f.readline()) # 按行读
print(f.read(10)) # 按字符读
print(f.tell())
f.seek(0) # 把光标回到开头
f.seek(12) # 把光标移动到 12 个字符的位置
print(f.readline())
print(f.encoding) # 打印文件编码
print(f.isatty()) # 判断文件是否是终端设备, 返回 Ture or false
print(f.seekable()) # 判断是否能移动文件光标, 返回 Ture or false
print(f.readable()) # 判断文件是否可读
print(f.writable()) # 判断文件是否可写
# f = open("file_test","a",encoding="utf-8")
# f.truncate(12) # 从头开始截取多少字符
来源: http://www.bubuko.com/infodetail-2478712.html