我有一个以下格式的文件:
[s1,s2,s3,s4,...] SOME_TEXT
(per line)
例如:
[dog,cat,monkey] 1,2,3
[a,b,c,d,e,f] 13,4,6
包含括号。
假设我有另一个这样的字段,其中包含两行:
[banana,cat2,monkey2] 1,2,3
[a2,b2,c2,d,e,f] 13,4,6
我想获取这种形式的两个文件并按以下方式对齐它们:
[dog^banana,cat^cat2,monkey^monkey2] 1,2,3
[a^a2,b^b2,c^c2,d^d2,e^e2,f^f2] 13,4,6
同时确保相应行(例如1、2、3和13、4、6)中的“SOME TEXT”相同,并且每个相应行中括号中的元素数量相同。什么是快速紧凑的方法来做到这一点?
谢谢。
最佳答案
def read_file(fp,hash):
for l in fp:
p = l[1:].find(']')
k = l[p+3:-1]
v = l[1:p+1].split(",")
if k not in hash:
hash[k] = v
else:
hash[k] = zip(hash[k], v)
hash = {}
for fname in ('f1.txt', 'f2.txt'):
with open(fname) as fp:
read_file(fp, hash)
for k,v in hash.items():
print "[{0}] {1}".format(",".join("^".join(vv) for vv in v), k)
这是执行此操作的基本方法,如果您需要按照读取顺序排列文件中的行,则需要做更多的工作。
这是我得到的输出:
[a^a2,b^b2,c^c2,d^d,e^e,f^f] 13,4,6
[dog^banana,cat^cat2,monkey^monkey2] 1,2,3
编辑:
这还假设每个键
即。 13,4,6 在文件中出现一次。如果它可以出现多次,则必须将 hash[k] = zip(hash[k],v) 更改为更复杂的内容,例如
if k not in hash:
hash[k] = [[vv] for vv in v]
else:
for i,vv in enumerate(v):
hash[k][i].append(vv)
关于python - 用python快速处理数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4046641/