2016-12-09 3 views
0

現在、私は操作したい元のCSVファイルを持っています。各行の[3]値、すなわち行[3]は、文字「HKD」および数字を有する文字列を含む。私は文字と空白を削除する新しいCSVファイルを作成しようとしています。何らかの理由で、私が最後の〜約60行が断ち切ります。私はすべての行を印刷しようとしており、それらはPythonシェルでうまく表示されますが、私の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

データには何も明白ではありません。最後にファイルを '.close()'しないでください。 '' final-HK-MCap.csv ''を別々に開いて 'csv.writer()'に渡し、最後に '.close()'を実行すると、それは何か変更されますか?あなたの問題とは別に、ファイルをきれいに開いたり閉じたりするために 'with'を使う方法については、[here](https://jeffknupp.com/blog/2016/03/07/python-with-context-managers/)を参照してください。 。 – roganjosh

答えて

1

スクリプト終了時にファイルバッファが書き出されていない可能性があります。ファイルポインターオブジェクトに.close()を呼び出すと、バッファーがフラッシュされます。 pythonのアプローチは、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) 
関連する問題