连续两次使用"readlines()"

Bob*_*Bob 1 python io readlines

我正在尝试做这样的事情:

Lines = file.readlines()
# do something
Lines = file.readlines()  
Run Code Online (Sandbox Code Playgroud)

但第二次Lines是空的.这是正常的吗?

Amb*_*ber 7

是的,因为.readlines()将文件指针前进到文件的末尾.

为什么不在变量中存储行的副本?

file_lines = file.readlines()
Lines = list(file_lines)
# do something that modifies Lines
Lines = list(file_lines)
Run Code Online (Sandbox Code Playgroud)

它比击中磁盘两次效率要高得多.(请注意,list()调用是创建列表副本以便修改Lines不会影响的必要条件file_lines.)

  • 这里你的技术将 `Lines` 设置为与 `file_lines` 相同的 Python 对象。任何使一个物体发生变异的事物都会使另一个物体发生变异,因为它们是同一个对象。为了真正安全,您需要执行 `lines = file_lines[:]` 或以其他方式制作实际副本。顺便说一句,PEP 8 标准建议对变量名称使用小写,并为类保留大小写混合,因此我建议将“Lines”更改为“lines”。 (2认同)

hou*_*oft 6

您需要使用重置文件指针

file.seek(0)
Run Code Online (Sandbox Code Playgroud)

在使用之前

file.readlines()
Run Code Online (Sandbox Code Playgroud)

再次.