2016-10-04 14 views
0

私はPythonの初心者ですが、 "|"で区切られたデータを含むテキストファイルを読むのに問題があります。デリミタとして使用します。ファイルをCSV形式の列に分割するにはどうすればよいですか。Python |区切られたテキストファイルをCSV形式に変換する

import csv 
my_file_name = "NVG.txt" 
cleaned_file = "cleanNVG.csv" 

with open(my_file_name, 'r') as infile, open(cleaned_file, 'w') as outfile: 
    data = infile.read() 

    data = data.replace("|","") 
    outfile.write(data) 

このコードでは、|空白にはが含まれていますが、すべてのデータは1列になっています。どのようにこれを正しくフォーマットできますか? 事前に助けていただきありがとうございます。

+2

なぜあなたは|を削除していますか?あなたはセパレータであることを 'csv'に伝えてみませんか?すなわち 'csv.reader(infile、delimiter = '|')' – FamousJameous

答えて

5

を利用するcsv moduleは、あなたが実質的に任意の区切り文字でCSVファイルを読み込むことができます。

with open(my_file_name, 'r', newline='') as infile: 
    for line in csv.reader(infile, delimiter='|'): 
     # do stuff 

あなたが本当にファイルを再フォーマットする場合は、csv.writer直接使用することができます:あなたは区切りを削除する代わりにので、あなたのアプローチは動作しません

with open(my_file_name, 'r', newline='') as infile, open(cleaned_file, 'w', newline='') as outfile: 
    writer = csv.writer(outfile) 
    for line in csv.reader(infile, delimiter='|'): 
     writer.writerow(line) 

注意をそれを置き換える。 data.replace("|","")は、|を空の文字列に置き換えます。つまり、"foo|bar""foobar"になります。古いセパレータは、の新しいと交換する必要があります。 data.replace("|", ",")

+0

Ohh Okay !!!ありがとう!データは現在列にありますが、後には空の行が残ります。したがって、行1はデータを持ち、行2は空白、行3はデータ、行4は空白なので....それはなぜですか? – Cesar

+0

@Cesar * writer *オブジェクトを 'writer = csv.writer(outfile、lineterminator =" \ n ")'として定義します。 –

+0

実際には、** newline = '' **は台無しです。これは完璧に機能しました! – Cesar

1

あなたのコードで最も簡単な方法は、 "|"を " "、"を使用して "|"

data = data.replace("|", ",") 
1

あなたはcsvモジュールをインポートしているが、それを使用していません。 csv.reader

with open(my_file_name, 'r') as infile, open(cleaned_file, 'w') as outfile: 
    reader = csv.reader(infile, delimiter='|') 
関連する問題