2017-03-08 33 views
0

私はcsvファイルに行があり、各行は(@)で始まり、行内のすべてのフィールドは(;)で区切られています。 "Text"( "" [] "")を含むフィールドの1つには、csvファイル全体を読み込んでエクセルまたはアクセスする際にエラーが発生する改行があります。改行後のテキストは、テーブルの構造に従わずに独立した行と見なされます。csvファイルの改行を取り除く

@4627289301; Lima, Peru; 490; 835551022915420161; Sat Feb 25 18:04:22 +0000 2017; ""[OJO! 
la premiacin de los #Oscar, nuestros amigos de @cinencuentro revisan las categoras. 
+info: co/plHcfSIfn8]""; 0 
@624974422; None; 114; 835551038581137416; Sat Feb 25 18:04:26 +0000 2017; ""[Porque nunca dejamos de amar]""; 0 

これはPythonスクリプトを使用して任意のヘルプですか?

@4627289301; Lima, Peru; 490; 835551022915420161; Sat Feb 25 18:04:22 +0000 2017; ""[OJO! la premiacin de los #Oscar, nuestros amigos de @cinencuentro revisan las categoras. +info: co/plHcfSIfn8]""; 0 
@624974422; None; 114; 835551038581137416; Sat Feb 25 18:04:26 +0000 2017; ""[Porque nunca dejamos de amar]""; 0 

任意のヘルプ:または他のソリューションは...

出力として、私はラインを持っていると思いますか?私はcsvファイル(54MB)に改行のある行がたくさんあります。他の行はokです...

+0

また、コメント内の@は考慮されていませんか? –

+0

すべての行を例の2行目として構造化したい(@ 624914422 ...) – luisec

+1

何か試しましたか?かなり簡単な方法があるようです。それを行単位で読み込み、 '@'を破棄し、 ';'で分割するか、またはcsvモジュールを使用します。 –

答えて

0

期待される出力も共有してください。

とにかく、ファイルを整理して改行文字を削除することをお勧めします。次に、それをcsvとして読むことができます。 (あなたがいずれかを使用して、それを読むことができ、CSVとして

sed ':a;N;$!ba;s/\n/ /g' input_file | sed "s/ @/\[email protected]/g" > output_file 

読むファイル:一つの解決策は、

クリーン(Linuxの場合)ファイル(私は誰かが何か良い:-)を提案します信じている)ことができます他の方法)

import pandas as pd 
df = pd.read_csv('output_file', delimiter=';', header=None) 
df.to_csv('your_csv_file_name', index=False) 

それはあなたはリットルを検索することができ

+0

ありがとう@PaulRooney – Pintu

+0

窓を使って作業しています – luisec

0

:-)あなたを助けている場合を見てみましょう「\r?\n+([email protected]\d+;)」のように「@」で始まらない行が続きます。

以下はこのregex101 demoから生成されたものです。このような行末をスペースで置き換えます。あなたは好きなものに変更することができます。

# coding=utf8 
# the above tag defines encoding for this document and is for Python 2.x compatibility 

import re 

regex = r"\r?\n+([email protected]\d+;)" 

test_str = ("@4627289301; Lima, Peru; 490; 835551022915420161; Sat Feb 25 18:04:22 +0000 2017; \"\"[OJO!\n" 
    "la premiacin de los #Oscar, nuestros amigos de @cinencuentro revisan las categoras.\n" 
    "+info: co/plHcfSIfn8]\"\"; 0\n" 
    "@624974422; None; 114; 835551038581137416; Sat Feb 25 18:04:26 +0000 2017; \"\"[Porque nunca dejamos de amar]\"\"; 0") 

subst = " " 

# You can manually specify the number of replacements by changing the 4th argument 
result = re.sub(regex, subst, test_str, 0, re.MULTILINE) 

if result: 
    print (result) 

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution. 
+0

コードを作成するときにデモが実際のテキスト行にいくつかの文字を追加しています... – luisec

+0

@luisecどういう意味ですか?空白を追加するだけの場合は、 'subst =" "'のために、それを ""に変更するか、または何でも置き換えることができます。 –

+0

"OJO!"デモは、デモからのコードをエクスポートするときに "\ n"を追加します(デモから、私はすでに試しました)...元の行には、改行がどこにあるかを特定するための文字はありません。 – luisec

関連する問題