1. 程式人生 > 其它 >python錯誤解決:ValueError: I/O operation on closed file.

python錯誤解決:ValueError: I/O operation on closed file.

技術標籤:Python錯誤解決pythoncsv

在python2版本中,
開啟csv檔案時要用binary模式開啟,即帶b的方式,如wb,ab等,而不能用文字模式,如w,w+,a+等。否則,使用witerrow寫,會產生空行。

但在python3版本中,直接使用wb寫入式開啟檔案,也會出錯,如下:

filename3="6-cos-result.csv"
out = open(filename3,'wb+')
csv_write = csv.writer(out,dialect='excel')
    
data_num=100#
for n in range(0,100
): print ("第",str(n+1),"個目標使用者") m=11 for k in range(m): if index1[k][n]!=n: temp=[] num=int(index1[k][n]) temp.append(num+1) temp.append(data1[k][n]) csv_write.writerow(temp) out.close()

出現錯誤:

Traceback (most recent call last):
在這裡插入圖片描述

此時,把out = open(filename3,‘wb+’)改為out = open(filename3,‘w+’),
此時程式正常執行,但是,寫入的表格中出現空行,如下:

在這裡插入圖片描述
此時,需要利用,with open(filename3,‘w’,newline=’’) as f:語句,則能夠實現消除空行的問題:

filename3="6-cos-result.csv"
with open(filename3,'w',newline='') as f:
    csv_write=csv.writer(f,
dialect='excel') data_num=100# for n in range(0,100): print ("第",str(n+1),"個目標使用者") m=11 for k in range(m): if index1[k][n]!=n: temp=[] num=int(index1[k][n]) temp.append(num+1) temp.append(data1[k][n]) csv_write.writerow(temp) f.close()

此時,由於縮排問題,出現錯誤:

在這裡插入圖片描述

filename3="6-cos-result.csv"
with open(filename3,'w',newline='') as f:
    csv_write=csv.writer(f,dialect='excel')

    data_num=100#
    for n in range(0,100):
        print ("第",str(n+1),"個目標使用者")
        m=11
        for k in range(m):

            if index1[k][n]!=n:    
                temp=[]
                num=int(index1[k][n])
                temp.append(num+1)
                temp.append(data1[k][n])
                csv_write.writerow(temp)
      
f.close()

錯誤解決,程式正常執行