5

複数のエントリを含むファイルがあります。各エントリは次の形式です。

"field1","field2","field3","field4","field5"

すべてのフィールドに引用符が含まれていないことが保証されていますが、,. 問題は、field4複数の行に分割できることです。したがって、サンプル ファイルは次のようになります。

"john","male US","done","Some sample text
across multiple lines. There
can be many lines of this","foo bar baz"
"jane","female UK","done","fields can have , in them","abc xyz"

Python を使用してフィールドを抽出したい。フィールドが複数の行に分割されていない場合、これは単純でした: Extract string from between quotes . しかし、複数行のフィールドがある場合にこれを行う簡単な方法を見つけることができないようです。

編集: 実際には 5 つのフィールドがあります。混乱があれば申し訳ありません。これを反映するために質問が編集されました。

4

4 に答える 4

6

csvモジュールはこの問題を解決できると思います。改行で正しく分割されます。

import csv 

f = open('infile', newline='')
reader = csv.reader(f)
for row in reader:
    for field in row:
        print('-- {}'.format(field))

次の結果が得られます。

-- john
-- male US
-- done
-- Some sample text
across multiple lines. There
can be many lines of this
-- foo bar baz
-- jane
-- female UK
-- done
-- fields can have , in them
-- abc xyz
于 2013-08-31T22:46:02.200 に答える
1

あなたがリンクした質問からの答えは私のために働いた:

import re
f = open("test.txt")
text = f.read()

string_list = re.findall('"([^"]*"', text)

この時点で、string_list には文字列が含まれています。現在、これらの文字列には改行を含めることができますが、使用できます

new_string = string_list.replace("\n", " ")

それをきれいにするために。

于 2013-08-31T22:45:07.460 に答える
0

試す :

awk '{FS=','} /pattern if needed/{print $0}' fname
于 2013-08-31T22:38:35.227 に答える
0

このファイルへの入力を制御する場合は\n 、値をコンマ区切りのリストに入れる前に、何か ([\n]?) に置き換えて事前にサニタイズする必要があります。

または、文字列を保存する代わりに、r-string として保存します。

次に、csvモジュールを使用して、定義済みのセパレーター、エンコーディング、および quotechar を使用してすばやく解析します

于 2013-08-31T22:50:06.313 に答える