【问题标题】:Iterate through a file lines in python [duplicate]遍历python中的文件行[重复]
【发布时间】:2018-01-06 04:16:45
【问题描述】:

我有一个文件,其中逐行列出了一些名称。

gparasha-macOS:python_scripting gparasha$ cat topology_list.txt 
First-Topology
Third-topology
Second-Topology

现在我正在尝试遍历这些内容,但我无法这样做。

file = open('topology_list.txt','r')
print file.readlines()
for i in file.readlines():
    print "Entered For\n"
    print i

topology_list = file.readlines()
print topology_list

file.readlines() 将文件的行打印为列表。 所以我得到了这个:

 ['First-Topology\n', 'Third-topology\n', 'Second-Topology\n']

但是,当我遍历此列表时,我无法这样做。

此外,当我将它分配给倒数第二行中的变量“topology_list”并打印时。它给了我一个空列表。

[]

所以我有两个问题。

我的方法有什么问题? 如何做到这一点?

【问题讨论】:

  • file.readlines() 读取所有行。这意味着在第一次调用之后,文件指针位于文件末尾,这导致对 file.readlines() 的第二次和第三次调用返回空。

标签: python


【解决方案1】:

最简单的:

with open('topology_list.txt') as topo_file:
    for line in topo_file:
        print line,  # The comma to suppress the extra new line char

是的,你可以遍历文件句柄,不需要调用readlines()。这样,对于大文件,您不必一次读取所有行(readlines() 就是这样做的)。

请注意,line 变量将包含尾随的换行符,例如“这是一行\n”

【讨论】:

  • 很好解决,感谢您对那个幻影换行符的解释!
  • 为什么你的打印语句没有括号??
  • 那是因为当我回答这个问题时,我使用的是 Python 2.7
【解决方案2】:

像这样更改您的代码:

file = open('topology_list.txt','r')
topology_list = file.readlines()
print content
for i in topology_list:
    print "Entered For\n"
    print i
print topology_list

当您调用file.readlines() 时,文件指针将到达文件末尾。对于相同的进一步调用,返回值将是一个空列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 2018-10-06
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多