2016-03-19 22 views
0

何とか面白い改行をデータフレームに入れてCSVファイルを読み込む必要があります。これはこれを行う最も効率的な方法ですか?特別な改行を含むCSVファイルを読み取る

with open(fileToRead,'r') as file: 
    filedata = file.read().replace("#@#@#", "\n") 
    file.close() 
df = pandas.read_csv(filepath_or_buffer=StringIO(filedata), sep='~') 

コードは機能しますが、これを実行する最善の方法はわかりません。

ファイルをfiledata変数に格納せずにこれを行う可能性はありますか?

+7

'file.close'は以下のようになっています:1.カッコがなくて実際に何かを行う*のようなタイプミス。 2.冗長性、 'with'コンテキストマネージャーを使用しているので。 – jonrsharpe

+0

'read_csv'には行終了オプションがありますが、1文字しか長さではありません。あなたのケースは異なるようです – Sharad

+0

標準ライブラリ 'csv'モジュールがマルチ文字行ターミネータを受け入れるかどうか分かりません。あなたの現在のソリューションには何が間違っていると思いますか?最初に入力ファイルがどのように見えるかを制御できない場合、これは問題を解決するようです。 –

答えて

0

次のコードを試してみてください。これにより、より多くの「通常の」改行でデータのコピーが作成されます。

with open('{}.clean'.format(fileToRead), 'w') as out_file: 
    with open(fileToRead, 'r') as in_file: 
     in_file_data = in_file.read().replace('#@#@#', '\n') 
     out_file.write(in_file_data) 

df = pandas.read_csv('{}.clean'.format(fileToRead), sep='~') 

現在のところ、現在使用している方法は問題ありません。

また、@ jonrsharpeのように、withステートメントでファイルを開くときにファイルを明示的に閉じる必要はありません。コードがwithステートメントの有効範囲を離れると、ファイルは自動的に閉じられます。

関連する問題