ひどくフォーマットされた一連のcsvを持っていて、Pythonの標準ライブラリからcsvパーサを使って解析するときに問題があります。本質的に、csvの文字はエスケープ文字ではなく、理解できない出力が出ています。python csv引用符で囲まれたエスケープ文字でCSVを解析できません
パーサーは時には適切な行を得ることができますが、不規則に削除または追加しているようです。たとえば、id = 1のエントリでは、文字列の途中の引用符は削除されますが、末尾の引用符は保持されます。最後のエントリ(id = 3)でも同様のことが起こります。私は、最も外側の引用符がIDのようにエントリにドロップされることを期待します。
また、私が予測可能な方法で線を結合していません。 id = 2のエントリは2つのエントリに分割されており、他の2つはそのまま維持されているが、これは分割されているパターンを理解できません。
csvの形式には多少の曖昧さがあります。それは、エスケープされていない戻り文字以外の解析が困難なことを理解していません。私は無駄にフォーマットのさまざまなパラメータを試してみました。どんな透明性も高く評価されます。ありがとう!
編集:明確にするために、私はCSVファイルを解析する前に文字列の置換を行うことができます。私はなぜ出力が正規ではないように思っています。
コード:
import csv
with open('text.csv') as csv_file:
for line in csv.reader(csv_file):
print(line)
入力:
"id","text"
"1","This line here
More Text "quoted"
"2","This line here "quoted" More Text
More Text "quoted" More Text"
"3","This line here
"quoted"
出力:
['id', 'text', 'id2']
['97910', 'This line here\r\nMore Text quoted"', '1']
['97930', 'This line here quoted" More Text']
['More Text "quoted" More Text"', '2']
['97930', 'This line here\r\nquoted"', '3']
所望の出力:
['id', 'text', 'id2']
['97910', 'This line here\r\nMore Text "quoted', '1']
['97930', 'This line here "quoted" More Text\r\nMore Text "quoted" More Text', '2']
['97930', 'This line here\r\n"quoted', '3']
私はもっと厳しいCSVがどのように見えるのか理解しています。なぜ私は誰かが壊れているのか、他の人は壊れているのか、もっと尋ねています。 –
@QuintonRobbins私は自分の答えを更新します。 – McGrady
私が正しいと認識している行は、引用符の特定の組み合わせのためにパーサーによって偶然に受け取られているだけで、実際にはどれも「正しい」方法で解析されていないことを示唆していますか? –