我有一个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]))
但结果并不好:
我想:
答案 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)]
理想情况下,您应该关闭可能在引号中添加换行符的内容。