python循环不会在第二次传递时迭代

时间:2014-01-15 13:41:50

标签: python csv

当我在Python IDLE Shell中运行以下命令时:

f = open(r"H:\Test\test.csv", "rb")
for line in f:
    print line
    #this works fine

然而,当我第二次运行以下内容时:

for line in f:
    print line
    #this does nothing

3 个答案:

答案 0 :(得分:4)

这不起作用,因为您已经第一次寻找到文件的末尾。您需要快退(使用.seek(0))或重新打开文件。

其他一些指示:

  1. Python有一个非常好的csv模块。除非这样做是为了教育,否则不要尝试自己实施CSV解析。
  2. 您可能希望以'rU'模式打开文件,而不是'rb''rU'是通用换行模式,它将处理来自具有不同行结尾的平台的源文件。
  3. 在处理文件对象时使用with,因为即使出现错误,它也会为您清理句柄。例如:
  4. with open(r"H:\Test\test.csv", "rU") as f:
        for line in f:
            ...
    

答案 1 :(得分:3)

你可以从变量中读取文件中的数据,然后你就可以迭代这些数据了。您希望在脚本中使用的次数。这比来回做seek要好。

f = open(r"H:\Test\test.csv", "rb")
data = f.readlines()
for line in data:
        print line

for line in data:
        print line

输出:

# This is test.csv

Line1,This is line 1, there are, some numbers here,321423423

Line2,This is line2 , there are some characters here,sdfdsfdsf

# This is test.csv

Line1,This is line 1, there are, some numbers here,321423423

Line2,This is line2 , there are some characters here,sdfdsfdsf

答案 2 :(得分:2)

因为你已经完成了CSV文件,并且迭代器已经用完了。你需要在第二次循环之前重新打开它。