2017-08-29 10 views
0

解決できないファイルを開くときにエラーが発生します。私は書いた別の小さなプログラムを使用してこの問題のない正確なファイル を開くことができます。CSVエラーオープンファイル

まずプログラム(に動作しません):

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. 

、第2のプログラム(作品):

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])) 

最初のプログラムではわからない問題があります。 2番目のプログラムは、同じファイルをうまく開くだけです。

答えて

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. 
です。