2016-12-10 8 views
0

私は#区切り記号で多くのcsvを持っていますが、私はpythonを使ってそれらのすべてに対して "text to columns"を適用したいと思います。 :Pythonを使って複数のcsv列にオートテキスト

例えば、私は 1#2#3#4

のように見え、私はそれが次のようになりたいので、同じファイルでそれを書き換えたいファイル「filename.csv」を持っています1 2 3 4 それ自身の列の各番号は

今の私のコードは次のとおりです。

import csv 
with open('filename.csv', 'rb') as csvfile: 
      with open('out.csv','w') as csvfileout: 
      spamreader = csv.reader(csvfile, delimiter='#', quotechar='#') 
      spamwriter=csv.writer(csvfileout,delimiter='#',quotechar=' ') 
      for row in spamreader: 
        lines=' '.join(row) 
        csvfileout.write(lines) 

そして、私の出力がちょうど間違っています。 私のコードで間違っていることを教えてください。

答えて

2

デリミタで、quotecharではなく変更してください。

そして、あなたは出力に直接入力「パイプ」することができ、(手動で不要であるjoinと行を作成した)行としてデータを保持:

import csv 
with open('filename.csv', 'r') as csvfile, open('out.csv','w') as csvfileout: 
    spamreader = csv.reader(csvfile, delimiter='#') 
    spamwriter = csv.writer(csvfileout,delimiter=' ') 
    spamwriter.writerows(spamreader) 

メモをいくつかのPython 2つのバージョンは、wbが必要であること出力ファイルの場合はpython 3のバージョンでは、ファイルを開くために余分なパラメータnewline=''が必要です。

最新のpythonリリース(2または3)でどちらも不要です。

+0

ありがとうございます。 でもまだ問題があります。これを見るためにExcelを使用すると、別の列にはなく、ただ1つのセルに表示されます。それを処理する方法はありますか? – S3xCodeandRocknRoll

+0

'delimiter = '''の代わりに、 'dialect = csv.excel'とデリミタを使用しないでください。 – Gribouillis

+0

excelはcsvファイルを"; "でオープンします。または "、"バージョンに応じて適切に、スペースではなく。 –

0

これはLinuxのsedコマンドで簡単に実現できます。

最初のチェックもしそうのようなその作業:

sed 's/#/ /g' filename 

それはその後、働いている場合は、交換することができ、すべてのそのようなspace#:現在のフォルダ内の単一のファイルの

sed -i 's/#/ /g' filename 
現在のフォルダ内のすべてのファイルに対して

sed -i 's/#/ /g' ./* 
関連する問題