【发布时间】:2012-04-29 08:52:29
【问题描述】:
我正在尝试做这样的事情:
Lines = file.readlines()
# do something
Lines = file.readlines()
但第二次Lines 是空的。这正常吗?
【问题讨论】:
我正在尝试做这样的事情:
Lines = file.readlines()
# do something
Lines = file.readlines()
但第二次Lines 是空的。这正常吗?
【问题讨论】:
是的,因为.readlines() 将文件指针前进到文件末尾。
为什么不将行的副本存储在变量中?
file_lines = file.readlines()
Lines = list(file_lines)
# do something that modifies Lines
Lines = list(file_lines)
这比敲击磁盘两次要高效得多。 (请注意,list() 调用是创建列表副本所必需的,因此对 Lines 的修改不会影响 file_lines。)
【讨论】:
Lines 设置为与file_lines 相同的Python 对象。任何改变一个的东西都会改变另一个,因为它们是同一个对象。为了真正安全,您需要执行lines = file_lines[:] 或以其他方式制作实际副本。顺便说一句,PEP 8 标准建议对变量名使用小写,并为类保留混合大小写,所以我建议将 Lines 更改为 lines。
list() 电话。至于变量名,我只是重新使用了 OP 的名称,以使其更易于阅读。我同意你的观点,小写通常更好。
list() 包装器的,但我做到了。对此感到抱歉。
您需要使用重置文件指针
file.seek(0)
使用前
file.readlines()
再次。
【讨论】:
为了不用每次都用 seek 方法来重新设置,使用 readlines 方法,但你必须像下面这个例子一样将它存储在变量中:
%%writefile test.txt
this is a test file!
#open it
op_file = open('test.txt')
#read the file
re_file = op_file.readlines()
re_file
#output
['this is a test file!']
# the output still the same
re_file
['this is a test file!']
【讨论】: