在 Python 中你可以这样做:
tempstr = """A\tB\t5\tA1,A2,A3,A4,A5\tB1,B2,B3,B4,B5
C\tD\t3\tC1,C2,C3\tD1,D2,D3"""
data = []
for line in tempstr.split("\n"):
line = line.split("\t")
split_column_1 = line[3].split(",")
split_column_2 = line[4].split(",")
if len(split_column_1) != len(split_column_2):
print("Something wrong")
else:
for c1,c2 in zip(split_column_1,split_column_2):
data.append((line[0],line[1],line[2],c1,c2))
for d in data:
print("\t".join(d))
输出:
A B 5 A1 B1
A B 5 A2 B2
A B 5 A3 B3
A B 5 A4 B4
A B 5 A5 B5
C D 3 C1 D1
C D 3 C2 D2
C D 3 C3 D3
有TSV文件
您可以使用 csv 模块来处理您的数据:
import csv
data = []
with open('resources/data.tsv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter='\t')
for row in csv_reader:
split_column_1 = row[3].split(",")
split_column_2 = row[4].split(",")
if len(split_column_1) != len(split_column_2):
print("Something wrong")
else:
for c1, c2 in zip(split_column_1, split_column_2):
data.append((row[0], row[1], row[2], c1, c2))
for d in data:
print("\t".join(d))
说明
- 使用 csv 模块打开文件。优点是它已经对我们指定的分隔符进行了拆分。默认应该是 "," 但我们使用的是
\t,因为我们有一个 tsv 文件。
with open('resources/data.tsv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter='\t')
- 我们遍历每一行/每一行。 csv 模块的一个功能也可以通过 for 循环轻松完成。
for row in csv_reader:
- 现在我们将第四列和第五列拆分为“,”,因为它们仍然是字符串。现在我们有了一个包含拆分元素的列表。
split_column_1 = row[3].split(",")
split_column_2 = row[4].split(",")
- 如果这两个的长度不同,则数据有问题,可能导致意外事件。 (取决于您的代码)因此我们会检查是否是这种情况(如果您的数据没有任何错误,则永远不会是真的)
if len(split_column_1) != len(split_column_2):
print("Something wrong")
- 我们将所有数据保存为列表中的元组。如果需要,您稍后还可以在稍后的步骤中访问此数据(例如
data[3][3] # 4th row, 4th element -> A4
else:
for c1, c2 in zip(split_column_1, split_column_2):
data.append((row[0], row[1], row[2], c1, c2))
- 打印得很好,使它看起来像您预期的输出。基本上,您可以在字符串上使用连接(在我们的例子中,我们采用
\t)并使用元组/列表作为参数。现在他将元组/列表的所有元素与左侧的字符串连接起来:
for d in data:
print("\t".join(d))