这是pandas库擅长的任务:
import pandas as pd
df1 = pd.read_csv("c1.txt", sep="|", header=None).dropna()
df2 = pd.read_csv("c2.txt", sep=" ", header=None)
merged = df1.merge(df2, on=1).ix[:,:-1]
merged.to_csv("merged.csv", sep="|", header=None, index=None)
一些解释如下。首先,我们将文件读入称为 DataFrames 的对象中:
>>> df1 = pd.read_csv("c1.txt", sep="|", header=None).dropna()
>>> df1
0 1 2 3
0 ?parallel dog numbering position
3 ?parallel cat nuucers position
6 ?non parallel honey numbering position
>>> df2 = pd.read_csv("c2.txt", sep=" ", header=None)
>>> df2
0 1 2
0 23 dog 4
1 24 cat 5
2 28 cow 7
.dropna()
跳过没有任何数据的情况。或者,df1 = df1[df1[0].str.startswith("?")]
将是另一种方式。
然后我们将它们合并到第一列:
>>> df1.merge(df2, on=1)
0_x 1 2_x 3 0_y 2_y
0 ?parallel dog numbering position 23 4
1 ?parallel cat nuucers position 24 5
我们不需要最后一列,所以我们对其进行切片:
>>> df1.merge(df2, on=1).ix[:,:-1]
0_x 1 2_x 3 0_y
0 ?parallel dog numbering position 23
1 ?parallel cat nuucers position 24
然后我们用 写出来to_csv
,产生:
>>> !cat merged.csv
?parallel|dog|numbering|position|23
?parallel|cat|nuucers|position|24
现在,对于许多简单的任务来说,可能是多余的,学习如何使用像模块pandas
这样的低级工具也很重要。csv
OTOH,当您只想立即完成某些事情时(tm),它非常非常方便。