如何用python解析tsv文件?

时间:2017-02-21 03:43:28

标签: python csv

我有一个tsv文件,其中包含一些换行数据。

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

第三行的b在第二行是bb的换行符,因此它们是一个数据:

第一行的第四个值:

aaa

第二行的第四个值:

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

4 个答案:

答案 0 :(得分:7)

只需使用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']

答案 1 :(得分:0)

import scipy as sp
data = sp.genfromtxt("filename.tsv", delimiter="\t")

答案 2 :(得分:0)

import pandas as pd
data = pd.read_csv ("file.tsv", sep = '\t')

答案 3 :(得分:-1)

当.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)]

理想情况下,您应该关闭可能在引号中添加换行符的内容。