2017-02-21 8 views
0

私はいくつかの改行データを含むtsvファイルを持っています。Pythonでtsvファイルを解析するには?

111 222 333 "aaa" 
444 555 666 "bb 
b" 

ここb 3行目は、2行目bbの改行文字であり、それらが一つのデータである:最初の行の

第4の値:

aaa 

第2行目の値:

bb 
b 

Ctrl + CとCtrl + VをExcelファイルに貼り付けるとうまくいきます。しかし、私はPythonを使用してファイルをインポートする場合、どのように解析するのですか?

私が試してみました

lines = [line.rstrip() for line in open(file.tsv)] 
for i in range(len(lines)): 
    value = re.split(r'\t', lines[i])) 

をしかし、結果は良くありませんでした:

enter image description here

私が欲しい:コンテンツ内

enter image description here

+1

ないあなたはこれで何を意味するのか確認してください:「ここに3行目のbはBBの改行文字である」 – Bemmu

答えて

1

csvモジュールを使用してください。引用されたフィールドの新しい行のようなCSVファイルの可能なすべてのコーナーケースについて知っています。

with open("file.tsv") as fd: 
    rd = csv.reader(fd, delimiter="\t", quotechar='"') 
    for row in rd: 
     print(row) 

正しく出力されます:

['111', '222', '333', 'aaa'] 
['444', '555', '666', 'bb\nb'] 
+0

ありがとうございます。シンプルで最高のソリューションです。 –

0

改行文字、あなたの.tsv /のセル(セル)。 csvは通常、引用符で囲まれています。もしそうでなければ、標準のパースはそれを次の行の先頭と混同します。あなたの場合、行

for line in open(file.tsv) 

は自動的に区切り文字として改行文字を使います。

ファイルが4列しかない場合は、テキスト全体を読み込み、タブに基づいて分割してから、一度に4つの項目を取り出すことができます。

# read the entire text and split it based on tab 
old_data = open("file.tsv").read().split('\t') 

# Now group them 4 at a time 
# This simple list comprehension creates a for loop with step size = num. of columns 
# It then creates sublists of size 4 (num. columns) and puts it into the new list 
new_data = [old_data[i:i+4] for i in range(0, len(old_data), 4)] 

改行を含む可能性のあるコンテンツを引用符で囲むのが理想的です。

+0

はどうもありがとうございました。はい、実際のデータは二重引用符で囲まれています。私はその話題を編集した。私はあなたの方法を読むでしょう。 –

関連する問題