在python中迭代文件行

在python中迭代文件行,python,Python,我有一个文件,其中有一些名字逐行列出 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 "

我有一个文件,其中有一些名字逐行列出

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']
然而,当我遍历这个列表时,我无法这样做

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
另外,当我将其分配给变量“topology_list”时,如倒数第二行所示,并将其打印出来。它给了我一个空列表

[]
所以我有两个问题

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

如下更改代码:

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()
时,文件指针将到达文件的末尾。对于相同的进一步调用,返回值将是一个空列表。

最简单的:

[]
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
变量将包含尾随的新行字符,例如“this is a line”

file.readlines()
读取所有行。这意味着在第一次调用之后,文件指针位于文件的末尾,这将导致对
file.readlines()
的第二次和第三次调用返回空。很好的解决方法,感谢您对该虚幻新行字符的解释!为什么print语句没有括号?因为我回答这个问题时使用的是Python 2.7