python文件读写
读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
文件打开模式若有不解,请先阅读博客:文件打开模式,python的文件打开模式同 C 一致。
python常见的文件操作方法有([]代表可选):
file.read([size]) # 一次读取size个字符并返回字符串,如果未给定或为负则读取全部
file.readline([size]) # 每次读取整行字符,包括\n
file.readlines([sizeint]) # 一次读取所有内容并按行返回list,每行结尾带\n,若给定sizeint>0,则是设置每行最多读多少字节
file.write(str) # 将字符串写入文件,返回的是写入的字符长度
file.writelines(sequence) # 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符
file.seek(offset[, whence]) # 设置文件当前位置
file.flush() # 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入
file.next() # 返回文件下一行
file.truncate([size]) # 指定长度的话,就从文件的开头开始截取指定长度,其余内容被删除; 不指定长度的话,就从文件开头截断
# 到当前指针位置,其余内容删除
file.tell() # 返回文件当前位置
file.close() # 关闭文件。关闭后文件不能再进行读写操作
下面来看一个例子:
file_name = 'test.txt'
full_file_path = os.path.join('.', file_name)
with open(file_name, 'r+') as f:
print('Open Success')
"""
read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,
可以反复调用read(size)方法,每次最多读取size个字节的内容,
read()读取整个文件,此时读取光标已经留在文件的末尾了
file.seek(off, whence=0): 从文件中移动off个操作标记(文件指针),正往结束方向移动,负往开始方向移动
如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位置,2代表文件最末尾位置。
"""
f.seek(0, 0)
# readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list
for line in f.readlines():
print(line.strip())
f.seek(0, 0)
"""
在文件中,如果遇到一个空白行,readline()并不会返回一个空串,因为每一行的末尾还有一个或多个分隔符,因此
空白行至少会有一个换行符或者系统使用的其他符号。只有当真的读到文件末尾时,才会读到空串""。
"""
while True:
line = f.readline()
if not line:
print('EOF!')
break
print(line.strip())
f.close()
# 也可以直接 for 循环来读,内部相当于调用了 f.readline()
for line in f:
print(line)
f.close()
更高效的读取文件的做法是返回一个生成器:
with open(filename) as f:
lines = (line.strip() for line in f)
for line in lines:
print(line)
将 print() 函数的输出重定向到一个文件中:
f1 = open('sample.txt', 'rt', encoding='ascii') # 指定编码
with open('d:/work/test.txt', 'wt') as f:
print('Hello World!', file=f) # print() 函数的输出重定向到一个文件中去。
浙公网安备 33010602011771号