2017-04-01 9 views
0

CSVモジュールを使用してデータ処理を行うのが初めてです。そして、私は、入力ファイルInput Data Setを持っているし、このcode`Pythonを使用してcsvファイルの最初と最後の列を上書きする

import csv 
path1 = "C:\\Users\\apple\\Downloads\\Challenge\\raw\\charity.a.data" 
csv_file_path =   "C:\\Users\\apple\\Downloads\\Challenge\\raw\\output.csv.bak" 

with open(path1, 'r') as in_file: 
    in_file.__next__() 
    stripped = (line.strip() for line in in_file) 
    lines = (line.split(":$%:") for line in stripped if line) 
    with open(csv_file_path, 'w') as out_file: 
     writer = csv.writer(out_file) 
     writer.writerow(('id', 'donor_id','last_name','first_name','year','city','state','postal_code','gift_amount')) 
    writer.writerows(lines) 

`Current Output File

を使用すると、CSVファイルの最初と最後の列に:)(削除することが可能です。そして、私は出力が欲しいのです Expected OUTPUT(After removing :) 私を助けてください。

+0

だから、私たちにこれをしてもらいたいですか?試したコードはありますか? – Artagel

+0

ただの通知。 'gift_amount'カラムには値にカンマ(、)が付いています。つまり、データセットがタブ(またはカンマ以外のもの)で区切られている必要があります。 @Artagelが言ったように、あなたがこれまで行ってきたことのいくつかのコードを提供してください。 – TasosGlrs

+0

私の最初の入力はテキストファイルで、フォーマットは次のとおりです:id:$%:donor_id:$%:last_name:$%:first_name:$%:year:$%:city:$%:state:$%:postal_code:$ %:ギフト_AMount:$ :1:$%:10763:$%:アーロンとシャーリーファミリー財団:$%:アーロン:$%:2017:$%:ニューヨーク:$%:NY:$%:10065:$ %:380.00:csvファイルに変換されます。 – user229204

答えて

1

最初と最後の列に ':'を取り除きたい場合は、これが機能するはずです。あなたの質問にコメントしたので、あなたのデータセットにカンマ「、」があるので、データセットを読む前にあなたのデータセットはtab(またはカンマ以外のもの)で区切られていなければなりません。

path1 = '/path/input.csv' 
path2 = '/path/output.csv' 

with open(path1, 'r') as input, open(path2, 'w') as output: 
file = iter(input.readlines()) 
output.write(next(file)) 

for row in file: 
    output.write(row[1:][:-2] + '\n') 

更新

だからあなたのコードを与えた後、私は最初のファイルから起動プロセス全体を行うには小さな変更を追加しました。アイデアは同じです。各行の最初と最後の文字を除外してください。だからline.strip()の代わりにline.strip()[1:][:-2]が必要です。

import csv 
path1 = "C:\\Users\\apple\\Downloads\\Challenge\\raw\\charity.a.data" 
csv_file_path = "C:\\Users\\apple\\Downloads\\Challenge\\raw\\output.csv.bak" 

with open(path1, 'r') as in_file: 
    in_file.__next__() 
    stripped = (line.strip()[1:][:-2] for line in in_file) 
    lines = (line.split(":$%:") for line in stripped if line) 
    with open(csv_file_path, 'w') as out_file: 
     writer = csv.writer(out_file) 
     writer.writerow(('id', 'donor_id','last_name','first_name','year','city','state','postal_code','gift_amount')) 
     writer.writerows(lines) 
+0

上記のコードはStopIterationエラーを投げます。 – user229204

+0

このコードは、処理後に作成する.csvファイルでのみ動作します。私は私の答えにあなたのコードを使用して最初から全プロセスを行う別のソリューションを含める予定です。 – TasosGlrs

+0

ありがとう@タソスは私のために働いた – user229204

関連する問題