File.readlines() 在 运行 行之后第二次不起作用。 Python
File.readlines() doesn't work after running line a second time. Python
对于一个项目,我一直将数据存储在文本文档中,并且在尝试在脚本中接收回该数据时我注意到了一个问题。更具体地说,我正在使用 readlines() 方法来获取数据。
当我第一次使用它时,它工作得很好;但是,此后的任何时候,它 returns 一个空列表,尽管文档中没有任何更改。
我用这一小段代码重现了这个问题:
testDocRead = open("C:\Users\emowe\OneDrive\Desktop\Python\testDocument.txt", "r")
print(testDocRead.readlines()) # attempt 1
print(testDocRead.readlines()) # attempt 2
第一次尝试时,一切正常。它打印:
['Filler\n', 'text\n', 'to\n', 'add\n', 'lines']
第二次尝试简单地打印:
[]
我的问题是:
- 为什么会这样?
- 如何在不返回任何内容的情况下更新值?
一个解释是,当你打开文件进行读取时,你使用第一个testDocRead.readlines()
,它读取所有行;从而将文件指针指向文件末尾。
任何后续的 readlines() 都不会给出任何结果,因为它在
文件结尾。
您需要将文件指针重置回开头。
即
testDocRead = open("C:\Users\emowe\OneDrive\Desktop\Python\testDocument.txt", "r")
print(testDocRead.readlines()) # attempt 1
testDocRead.seek(0)
print(testDocRead.readlines()) # attempt 2
seek(0)
将文件指针重置回文件开头。
您还可以使用的另一个选项是关闭文件并再次打开它。
因为readlines()函数returns文件的所有行,以列表的形式。
如果您仍想打印两次输出,请写:
with open(path_name , 'r') as reader:
data = reader.readlines()
print(f"{data}\n{data}")
或者,如果您想逐行打印,请使用 .readline
而不是 .readlines
。
最后,您还可以使用 .seek
方法重新启动您的 readlines 函数,方法是将其设置为 0。
对于一个项目,我一直将数据存储在文本文档中,并且在尝试在脚本中接收回该数据时我注意到了一个问题。更具体地说,我正在使用 readlines() 方法来获取数据。 当我第一次使用它时,它工作得很好;但是,此后的任何时候,它 returns 一个空列表,尽管文档中没有任何更改。
我用这一小段代码重现了这个问题:
testDocRead = open("C:\Users\emowe\OneDrive\Desktop\Python\testDocument.txt", "r")
print(testDocRead.readlines()) # attempt 1
print(testDocRead.readlines()) # attempt 2
第一次尝试时,一切正常。它打印:
['Filler\n', 'text\n', 'to\n', 'add\n', 'lines']
第二次尝试简单地打印:
[]
我的问题是:
- 为什么会这样?
- 如何在不返回任何内容的情况下更新值?
一个解释是,当你打开文件进行读取时,你使用第一个testDocRead.readlines()
,它读取所有行;从而将文件指针指向文件末尾。
任何后续的 readlines() 都不会给出任何结果,因为它在 文件结尾。
您需要将文件指针重置回开头。
即
testDocRead = open("C:\Users\emowe\OneDrive\Desktop\Python\testDocument.txt", "r")
print(testDocRead.readlines()) # attempt 1
testDocRead.seek(0)
print(testDocRead.readlines()) # attempt 2
seek(0)
将文件指针重置回文件开头。
您还可以使用的另一个选项是关闭文件并再次打开它。
因为readlines()函数returns文件的所有行,以列表的形式。
如果您仍想打印两次输出,请写:
with open(path_name , 'r') as reader:
data = reader.readlines()
print(f"{data}\n{data}")
或者,如果您想逐行打印,请使用 .readline
而不是 .readlines
。
最后,您还可以使用 .seek
方法重新启动您的 readlines 函数,方法是将其设置为 0。