Python调用read()后遍历文件对象计数为0的问题求助
问题原因
当你调用data.read()时,Python会一次性读取文件全部内容,同时文件对象的读取指针会移动到文件末尾。此时再遍历data这个文件对象,因为指针已经在末尾,没有剩余内容可读取,循环不会执行,最终count输出0。
解决方法
方法1:重新打开文件
第一次读取后指针到了末尾,重新打开文件就能让指针回到起始位置:
# 第一次读取并打印 data = open('mbox-short.txt') dataR = data.read() print(dataR) data.close() # 养成关闭文件的好习惯 # 重新打开文件进行遍历 data = open('mbox-short.txt') count = 0 for x in data: count += 1 print(count) data.close()
方法2:用seek()重置文件指针
不需要重新打开文件,调用文件对象的seek(0)方法,直接把读取指针移回文件开头:
data = open('mbox-short.txt') dataR = data.read() print(dataR) data.seek(0) # 将指针移回文件起始位置 count = 0 for x in data: count += 1 print(count) data.close()
方法3:直接使用已读取的内容
既然已经把文件内容存在dataR里,直接对这个字符串处理更高效,不用再操作文件对象:
data = open('mbox-short.txt') dataR = data.read() print(dataR) # 按换行符分割成列表后遍历计数 count = 0 for x in dataR.splitlines(): count += 1 print(count) data.close()
额外推荐:用with语句打开文件,它会自动帮你关闭文件,避免资源泄漏:
with open('mbox-short.txt') as data: dataR = data.read() print(dataR) # 重新用with打开遍历 with open('mbox-short.txt') as data: count = 0 for x in data: count += 1 print(count)
内容的提问来源于stack exchange,提问作者Always Mad
相关产品推荐
相关产品推荐

