CSV错误打开文件

时间:2017-08-29 15:22:03

标签: csv python-3.6

我在打开无法解析的文件时出错。我能够打开 使用我编写的另一个小程序,这个确切的文件没有问题。

第一个程序(不起作用):

import csv


passwd = "f:\mark\python\etc_password.txt"
output = "f:\mark\python\output.txt"

with open(passwd, 'r') as passwd1, open(output, 'w') as output1:
    ro = csv.reader(passwd1, delimiter=':')
    wo = csv.writer(output1, delimiter='\t')

for record in ro:
    # if not record[0].startswith('#'):
    if len(record) > 1:
        wo.writerow((record[0], record[2]))

错误:

Traceback (most recent call last):
  File "C:/Users/Mark/PycharmProjects/main/main.py", line 11, in <module>
    for record in ro:
ValueError: I/O operation on closed file.

第二个程序(工作):

etcfile = "f:\mark\python\etc_password.txt"
users = {}
with open(etcfile, "r") as datafile:
    for line in datafile:
        if not line.startswith("#"):
            info = line.split(':')
            users[info[0]] = info[2]

for username in sorted(users):
    print("{}:{}".format(username, users[username]))

第一个程序有一个我无法弄清楚的问题。第二个程序可以很好地打开同一个文件。

1 个答案:

答案 0 :(得分:1)

错误ValueError: I/O operation on closed file.告诉你 你无法从已关闭的文件中读取。如果你看看你的缩进 第一个程序,你打开一个csv阅读器到一个文件,然后关闭 在with区块的末尾。这种行为的一个更简单的例子是

In [1]: import csv

In [2]: file = open('test.csv')

In [3]: ro = csv.reader(file)

In [4]: file.close()

In [5]: for record in ro:
   ...:     print(record)
   ...:     
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-5-1f7adaf76d31> in <module>()
----> 1 for record in ro:
      2     print(record)
      3 

ValueError: I/O operation on closed file.