Python文件操作:readlines()与readline()无返回值,read()正常的问题排查
问题原因与解决方案
嘿,这个问题我太熟悉了!本质是文件指针的位置在搞鬼~
当你调用f.read()的时候,Python会把文件里的所有内容一次性读取出来,同时把文件内部的“游标”(也就是指针)直接移动到文件的末尾。这时候你再调用f.readlines()或者f.readline(),游标已经没有后续内容可以读取了,自然就返回空列表和空字符串啦。
给你两种常用的解决办法:
方法1:重置文件指针位置
用f.seek(0)把指针移回文件开头,这样后续的读取操作就能重新从文件开头开始读了:
with open('seatninger.txt', 'r') as f: # open within a context manager f_contents = f.read() f.seek(0) # 将指针重置到文件起始位置 f_contents_list = f.readlines() f.seek(0) # 再次重置指针,因为readlines()也会把指针移到末尾 f_contents_line = f.readline() print(f_contents) print(f_contents_list) print(f_contents_line)
方法2:读取一次后在内存中处理内容
既然已经用read()把所有内容读到了内存里,不如直接对这个字符串进行处理,避免重复操作文件:
with open('seatninger.txt', 'r') as f: # open within a context manager f_contents = f.read() f_contents_list = f_contents.splitlines() # 把字符串按行分割成列表,效果和readlines()一致 # 取第一行内容,如果文件为空就返回空字符串 f_contents_line = f_contents.splitlines()[0] if f_contents else '' print(f_contents) print(f_contents_list) print(f_contents_line)
简单总结一下:文件对象的读取操作是单向且游标会移动的,一旦游标到了末尾,后续读取就拿不到内容了。要么重置游标,要么在内存里复用已经读取的内容,就能解决你的问题啦!
内容的提问来源于stack exchange,提问作者Liviu Iosif
相关产品推荐
相关产品推荐

