2016-12-09 103 views
0

目前我有一個原始的CSV文件,我想操作。每行的[3]值即行[3]包含一個字符串,其中包含字母「HKD」和一個數字。我試圖創建一個新的CSV文件,刪除字母和空格。出於某種原因,當我這樣做時,最後~60行會被切斷。我試圖打印出所有的行,並且它們在python shell中顯示得很好,但不會打印到我的CSV文件中。我不確定爲什麼。 csv輸出文件在第1931行被截斷,但它並沒有完全切斷它在第一列顯示1931的整個行,而不是其餘的數據。CSV文件行在最後被剪切

打印出圍繞1931年指數:

['1929', '8163 ', 'Merdeka Financial Services Group Ltd.', '154'] 
['1930', '8179 ', 'Food Idea Holdings Ltd.', '153'] 
['1931', '8079 ', 'Easy Repay Finance & Investment Ltd.', '150'] 
['1932', '8106 ', 'Zheda Lande Scitech Ltd. - H Shares', '149'] 
['1933', '1160 ', 'Grand Investment International Ltd.', '149'] 
['1934', '8363 ', 'SDM Group Holdings Ltd.', '148'] 

以下是我的代碼:

import csv 
csv_in = open('mcapdata.csv','rb') 

writer = csv.writer(open('final-HK-MCap.csv','a')) 

for row in csv.reader(csv_in): 
    row[3] = row[3].replace('HKD ','') 
    writer.writerow(row) 

我不明白爲什麼它會在外殼就好了,但沒有將其輸出到打印我的csv文件。在我的Python代碼中是否存在導致這種情況的不良做法?

+1

我在數據中看不到任何明顯的東西。你最後不要''關閉()'文件。如果單獨打開'final-HK-MCap.csv',是否會改變任何內容,將它傳遞給'csv.writer()',然後在文件末尾執行'.close()'?除了你的問題,你可以看看[這裏](https://jeffknupp.com/blog/2016/03/07/python-with-context-managers/)使用'with'來乾淨地打開和關閉文件。 – roganjosh

回答

1

腳本結束時可能沒有寫出文件緩衝區。在文件指針對象上調用.close()將刷新緩衝區。 pythonic方法是使用with上下文。

import csv 

with open('mcapdata.csv','rb') as csv_in, open('final-HK-MCap.csv','a') as csv_out: 
    reader = csv.reader(csv_in) 
    writer = csv.writer(csv_out) 

    for row in reader: 
     row[3] = row[3].replace('HKD ','') 
     writer.writerow(row)