我有3个tsv文件,其中包含员工的不同数据。我可以将这些数据与员工的姓氏和名字一起加入,这些姓名和名字出现在每个文件中。
我想只在一个电子表格中收集每位员工的所有数据。
(我不能只复制/删除列,因为有些员工不是文件编号2,而是文件编号3)。
所以我认为 - 我是初学者 - 一个脚本可以做到这一点,对于每个员工(一行),从新的tsv文件中的文件中收集尽可能多的数据。
编辑。 我拥有的例子(实际上我每个文件大约有300行,有些emloyees不在所有文件中)。
档案1
john hudson 03/03 male
mary kate 34/04 female
harry loup 01/01 male
档案2
harry loup 1200$
file3的的
mary kate atlanta
我想要的是什么:
column1 colum2 column3 column4 column5 column6
john hudson 03/03 male
mary kate 34/04 female atlanta
harry loup 01/01 male 1200$
这会对我有所帮助!
答案 0 :(得分:0)
使用此python脚本:
import sys, re
r=[]
i = 0
res = []
for f in sys.argv[1:]:
r.append({})
for l in open(f):
a,b = re.split('\s+', l.rstrip(), 1)
r[i][a] = b
if i == 0:
res += [a]
i += 1
for l in res:
print l," ".join(r[k].get(l, '-') for k in range(i))
脚本将每个文件加载到字典中(第一列用作键)。 然后脚本遍历第一个文件中第一列的值 从字典中写入对应的值(从其他文件创建)。
使用示例:
$ cat 1.txt
user1 100
user2 200
user3 300
$ cat 2.txt
user2 2200
user3 2300
$ cat 3.txt
user1 1
user3 3
$ python 1.py [123].txt
user1 100 - 1
user2 200 2200 -
user3 300 2300 3
答案 1 :(得分:0)
如果您熟悉SQL,那么您可以轻松地使用perl DBD::CSV模块来完成工作。但这也取决于你是否愿意写perl。