合并多个文件中的第一列

时间:2013-11-28 04:00:13

标签: python file file-io dictionary

我在标准输入中提供了文件#1:

{123:{'all_uppercase': 0, '#': 0, 'sscore !=0': 15}}
{456:{'all_uppercase': 0, '#': 1, 'sscore !=0': 19}}
{789:{'all_uppercase': 0, '#': 1, 'sscore !=0': 20}}

我有文件#2:

{'+1': {'all_uppercase': 0, '#': 0, 'sscore !=0': 15}}
{'0': {'all_uppercase': 0, '#': 1, 'sscore !=0': 19}}
{'0': {'all_uppercase': 0, '#': 0, 'sscore !=0': 8}}

我的输出应该是原样的:

 123 15 +1
 456 19 0
 789 20 0

为什么这些线必须按顺序排列是很重要的。因此,对于id-123,456,789,二进制数分别为+1,0,0和值15,19,20

我之所以这样,因为它们是文件中的字典,但字典的问题是“顺序”,所以值不是正确的顺序。

在标准输入时,我提供文件#1。

for line in sys.stdin:
   d = ast.literal_eval(line)
   for k,v in d.items():
      inner_dict = dicts.setdefault(k, {})
      inner_dict['sscore !=0'] = v.get('sscore !=0')
   f = open("file#2.txt","r")
   for score in f:
      d2 = ast.literal_eval(senti)


   print k,dicts[k]['sscore !=0'],d2.keys()
   f.close()

2 个答案:

答案 0 :(得分:2)

您似乎需要像这样使用zip

with open("file#2.txt","r") as f:
    for line, score in zip(sys.stdin, f):
        ...

答案 1 :(得分:1)

这就是我解决的问题:

dicts = {}
inner_dict = {}

以打印格式打开文件

with open("file#1.txt","r") as f:

Zip有助于保持原样

   for line, score in zip(sys.stdin, f):

#将其解释为词典

      d2  = ast.literal_eval(score) 

#for键,字典项中的值

      for k,v in d2.items(): 
         inner_dict = dicts.setdefault(k, {}) 

#getsn字典值部分的值,因为字典中的字典

         inner_dict['sscore !=0'] = v.get('sscore !=0') 

#prints字典的关键字,获取与其键对应的sscore的值,通过按空格分割得到第一列值

      print k,dicts[k]['sscore !=0'],re.split("\s+", line.strip())[0]

如果有人可以改进代码,请告诉我。