读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
文件打开模式若有不解,请先阅读博客:文件打开模式,python的文件打开模式同 C 一致。
python常见的文件操作方法有([]代表可选):
file.read([size]) # 一次读取size个字符并返回字符串,如果未给定或为负则读取全部 file.readline([size]) # 每次读取整行字符,包括 file.readlines([sizeint]) # 一次读取所有内容并按行返回list,每行结尾带 ,若给定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() 函数的输出重定向到一个文件中去。