2016-10-01 35 views
0
import csv 
import sys 
def switch(): 
    file1=open('enjoysport.csv','r') 
    for line in file1: 
     line.split(",")[0],line.split(",")[-1]=line.split(",")[-1],line.split(",")[0] 
    file1.close()          
    origin=sys.stdout 
    fil2=open("test.csv","w") 
    sys.stdout=fil2 
    print(file1) 
    sys.stdout = origin     
    fil2.close() 
switch() 

我想切換第一列和最後一列,但它沒有工作,更重要的是,切換後的文件不能寫入新的csv.file?開關變量和寫入問題,python

是這樣的:

<_io.TextIOWrapper name='agaricus_lepiota.csv' mode='r' encoding='cp1252'> 

什麼是錯的預先感謝您:)

回答

2

你需要更新的行實際上是寫入文件,你也可以使用CSV LIB閱讀寫你的文件內容:

def switch(): 
    with open('enjoysport.csv') as f, open("test.csv", "w") as out: 
     wr = csv.writer(out) 
     for row in csv.reader(f): 
      row[0], row[-1] = row[-1], row[0] 
      wr.writerow(row) # actually write it to test.csv 

在自己的代碼你正在做的每一行中的換擋元件,你從來不寫,結果使這是一個毫無意義的練習。

爲什麼你看到<_io.TextIOWrapper name='agaricus_lepiota.csv' mode='r' encoding='cp1252'>是因爲sys.stdout = fil2標準輸出重定向到文件2,那麼你打印參考file1即文件對象,以便被寫入/重定向到文件。

1

問題是這一行

line.split(",")[0],line.split(",")[-1]=line.split(",")[-1],line.split(",")[0] 

您可以通過分割創建四個臨時名單,這是該行直接,因爲他們沒有分配到任何變量後丟棄。

你必須處理一行,並直接寫入新文件:

file1=open('enjoysport.csv','r') 
fil2=open("test.csv","w") 
for line in file1: 
    parts = line.rstrip().split(',') 
    parts[0],parts[-1] = parts[-1], parts[0] 
    file2.write(','.join(parts) + '\n') 
file1.close() 
file2.close() 
+0

謝謝SOOOOO多!這是我感到困惑的問題 –