python 文件读写操作
1、打开/关闭文件操作
打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。
方式1: 格式:句柄 = open("文件名", "模式") myfile = open("1.txt", "w") # 打开文件,此种打开文件方式需手动关闭 myfile.close() #关闭文件 方式2: 格式:with open("文件名", "模式") as 句柄 with open("1.txt", "w") as myfile: #此种打开方式,不需要手动关闭文件
2、文件的打开模式
r :只读【只读:默认模式,指针位0】 w :只写【只写;存在则覆盖,不存在则创建,指针为0】 a :追加【追加:存在则追加,不存在创建在写入,指针在结尾】 r+ :读写【读写:指针默认在开头,写入时会覆盖目标位置内容,只能在开通阀盖写入,或者在结尾写入,中间写入不了,如果从当前位置写可以用 file1.seek(file1.tell())】 w+ :写读【写读:存在则覆盖,不存在则创建】 a+ :写读【写读:存在则追加,不存在创建在写入】 rb 或 r+b 【以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。】 wb 或 w+b 【以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。】 ab 或 a+b 【以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放】 rb+【以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。】 wb+【以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。】 ab+【以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。】 不带b的打开方式都是字符串类型 带b的打开方式都为字节(二进制)类型
3、常用方法
# myfile.seek() #调整指针位置 # myfile.write() #写入内容 # myfile.close() #关闭文件 # myfile.tell() #获取指针当前的位置 # myfile.read([size]) # 已字符串的格式返回所有内容,可指定读取内容的size,默认全部 # myfile.readline() # 返回一行 # myfile.readlines() #返回一个列表,每行为一个元素 # myfile.flush() #刷新缓冲区 # myfile.truncate() #截取内容,截取当前指针之前的内容,直接操作原文件
seek
def seek(self, offset: int, whence: int = 0) -> int: # offset 偏移量 # whence 偏移相对位置 #偏移相对位置为os模块当中的SEEK_SET、SEEK_CUR、SEEK_END: # os.SEEK_SET:表示文件的相对起始位置 = 0 # os.SEEK_CUR:表示文件的相对当前位置 = 1 # os.SEEK_END:表示文件的相对结束位置 = 2 myfile.seek(0, 0) = myfile.seek(0, os.SEEK_SET) # 指针至于文件开头 myfile.seek(2, 0) = myfile.seek(2, os.SEEK_SET) # 指针至于文件开头,并前后偏移2 myfile.seek(0, 1) = myfile.seek(0, os.SEEK_CUR) # 指针至于当前位置 myfile.seek(0, 2) = myfile.seek(0, os.SEEK_END) # 指针至于文件末尾
import os with open("1.txt", "r+", encoding="utf-8") as myfile: print(myfile.tell()) myfile.seek(0, 2) print(myfile.tell()) myfile.seek(0, os.SEEK_SET) print(myfile.tell()) myfile.read(3) print(myfile.tell()) myfile.seek(0, os.SEEK_END) print(myfile.tell()) 结果: 0 16 0 3 16 Process finished with exit code 0
4、读取一个文件每一行的实现方式:
# 方法1 f = open("2.txt", "r+") line = f.readline() while line: print line line = f.readline() f.close()
# 方法2 f = open("2.txt", "r+") ret = f.readlines() for line in ret: print line f.close()
# 方法3 f = open("2.txt", "r+") for line in f.readlines(): print line f.close()