2016-09-23 39 views
1

我有一個輸入文件,其中我正在進行字符串替換操作。替換後無法寫入CSV

我按單元格讀取文件單元格,替換字符串,然後將其寫回新的CSV文件。

input_file = open('/Users/tcssig/Desktop/unstacked2.csv', 'r', encoding='utf-8') 
output_file = open('/Users/tcssig/Desktop/unstacked3.csv', 'w', encoding='utf-8') 
writer = csv.writer(output_file , delimiter=' ') 
reader = csv.reader(input_file) 
for row in reader: 
    for string in row: 
     data = [string.replace('read','write')] 
     print(data) 
     writer.writerow(data) 

上面的代碼運行良好,但我得到一個空的輸出文件。

Example of data : 

    reading reading reading reading 
interval  0 1 2 3 

who axis 


Mikael X 0 10 20 30 

Mikael Y 50 40 30 20 

Mikael Z 100 90 80 70 

Mike X 0 0.1 0.2 0.3 

Mike Y 0.5 0.4 0.3 0.2 

麥克Z 1 0.9 0.8 0.7

我在想什麼?

+0

更正壓痕;目前還不清楚哪些代碼落入了「在行中的字符串」塊中。此外,要清楚,你是否試圖將每個單元格轉換爲單獨的行,或者只是替換單元格中的值? – ShadowRanger

+0

考慮使用['with'](https://docs.python.org/2/reference/compound_stmts.html#the-with-statement)語句自動關閉文件。 – martineau

+0

@scott,添加了上面的數據示例 – Sarang

回答

1

內容輸入文件:

"Roll No" English read Science 
"Roll No" English Write Science 

問題與您的代碼:

  1. 正如@Scott所述,文件不會關閉。
  2. 你正在閱讀單元格for string in row:並在那裏替換字符串。但更換後,您將該單元格作爲行寫入文件中。例如,你的代碼的輸出文件如下文件:

    卷沒有

    英語

    閱讀

    科學

這是由於上述原因,即你正在寫每個單元格。

如何讓它工作?

評論內嵌代碼

import csv 
input_file = open('mark.csv', 'r', encoding='utf-8') 
output_file = open('result.csv', 'w') 
writer = csv.writer(output_file , delimiter=' ', encoding='utf-8') 
reader = csv.reader(input_file) 
for row in reader: 
    #Initailize empty list for each row 
    data = [] 
    for string in row: 
     #Replace and add to data list 
     data.append(string.replace('read','write')) 
    #Now write complete 
    writer.writerow(data) 

input_file.close() 
output_file.close() 

輸出:

"Roll No" English write Science 

"Roll No" English Write Science 

可以達到同樣的事情,而不csv模塊。

with open("mark.csv") as input_file: 
    with open("result.csv",'w') as output_file: 
     for line in input_file: 
      new_line = (line.replace("read","write")).replace(","," ") 
      output_file.write(new_line) 
+0

第一個代碼以單行形式寫入數據,沒有任何分隔符來識別數據結構。 – Sarang

+0

你想要什麼分隔符 - 空格或逗號?你已經發布的代碼有delimiter =''作爲輸出文件。我也用過。 –

+1

糟糕!我的錯。它的工作完美,乾杯.... – Sarang

2

關閉您的文件:

output_file.close() 
input_file.close() 

也看到這個答案關於使用上下文管理的 https://stackoverflow.com/a/441446/4663466

+0

感謝Scott,我現在能夠得到輸出,但都在一個CSV列中。 有什麼辦法,我可以保存我的輸入文件結構? – Sarang

+0

查看你的問題下的評論 - 'writer.writerow(data)'行被縮進不正確。 –

+0

@Sarang你的嵌套循環在csv中迭代一行,然後通過每個字符串替換'read'和'write'。如果您有關於如何逐行編輯的問題,您應該提出一個新問題。如果可能的話,有一個數據示例會很有幫助,因爲str.replace()可能不是編輯輸出的唯一選項。 – Scott