【问题标题】:CSV file wont stay open in pythonCSV文件不会在python中保持打开状态
【发布时间】:2019-01-03 13:32:15
【问题描述】:

使用python 3。在下面的代码中,第二个循环不会打印,不知道为什么。

忽略我正在尝试做的事情,重点是在第一个循环之外无法访问该文件...

有什么想法吗?谢谢!!

Import csv
f = open('table.csv')
csv_f = csv.reader(f)

# Convert data entries to integers
for row in csv_f:
    if row[0]!="A": row[1:len(row)]=list(map(int,row[1:len(row)]))
    print(row)

# Print table again
for row in csv_f:
    print(row)

【问题讨论】:

  • 这是一个 python 功能,可防止您在未关闭的情况下保持文件指针打开。考虑在docs.python.org/3/library/csv.html#csv.reader 中将您的 csv 读取到内存中吗?
  • @Evgeny 不正确。发生这种情况是因为 csv_f 是一个迭代器,在您迭代一次后会耗尽。您可以根据需要保持手柄打开。

标签: python-3.x import-csv


【解决方案1】:

你想要做的是从 csv_f 访问数据,这是迭代器 - 这意味着它只能完全传递一次,然后你必须再次生成它。

您可以将其列出:

csv_f = list(csv.reader(f))

或在第二次循环之前再次加载文件。

与此同时,我建议稍微更改您的代码:

with open('table.csv') as f:
    csv_f = list(csv.reader(f))

    # Convert data entries to integers
    for row in csv_f:
        if row[0]!="A": 
            row[1:len(row)]=list(map(int,row[1:len(row)]))
        print(row)

    # Print table again
    for row in csv_f:
        print(row)

这样文件就不会在with open() as f 语句之外保持打开状态 - 比使用简单的open() 更好的做法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    相关资源
    最近更新 更多