如何使用管道分隔符

时间:2017-11-03 01:33:10

标签: python

我正在阅读一个文本文件,我将其转换为(键,对)数组。如果我有与管道分隔符相同的键,我想附加值。我是python的新手,有人可以帮我解决这个问题。请找到我的代码和输入输出格式:

文件输入:(test.txt)

1234567 E29dceffb-28bd-4f05-b91f-03f05510c081,0743,438864,10/06/2016,7,IK,PP,7136977,,4,37791,,,,01/11/2017
83738383 E29dceffb-38373-3839-8393-83038383,0743,438864,10/06/2016,7,PO,VC,4,37791,,,,01/11/2017
1234567 E29dceffb-38DFG3-4f05-0393-39303933,1234,78789,10/06/2016,7,LL,YY,7136977,,4,37791,,,01/10/2017

Python代码:

import sys

with open('test.txt') as f:
  result = dict(line.split(' ', 1) for line in f)
  for line in list:
    if line[0] in result:
        result[line[0]].append(line[1])
    else:
        result[line[0]] = [line[1]]

我想打印我的密钥和值,如下所示:

Key: 1234567.AB.K
Value: E29dceffb-28bd-4f05-b91f-03f05510c081,0743,438864,10/06/2016,7,IK,PP,7136977,,4,37791,,,,01/11/2017|E29dceffb-38DFG3-4f05-0393-39303933,1234,78789,10/06/2016,7,LL,YY,7136977,,4,37791,,,01/10/2017|

Key: 83738383.AB.K
Value: E29dceffb-38373-3839-8393-83038383,0743,438864,10/06/2016,7,PO,VC,4,37791,,,,01/11/2017|

如果同一个键出现多个值以区分第一个记录,第二个记录等,则使用管道分隔符。

我将在test.txt文件中获得大约2百万条记录。

我在python中如何有效地处理这个问题。我的python脚本没有按预期工作,如果我尝试附加相同键的值,它会破坏代码。

非常感谢任何帮助! 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我不确定list循环上的for

当您尝试为同一个键附加值时代码中断的原因是因为您创建result作为字典,每个值都是一个字符串。

您需要为最终结果创建result_dict,例如

result_dict = {}

with open('test.txt') as f:
  lines = list(line.split(' ', 1) for line in f)
  for line in lines:
    if line[0] in result_dict:
        result_dict[line[0]].append(line[1].strip())
    else:
        result_dict[line[0]] = [line[1].strip()]

print(result_dict)

将打印

{'1234567.AB.K': ['E29dceffb-28bd-4f05-b91f-03f05510c081,0743,438864,10/06/2016,7,IK,PP,7136977,,4,37791,,,,01/11/2017', 'E29dceffb-38DFG3-4f05-0393-39303933,1234,78789,10/06/2016,7,LL,YY,7136977,,4,37791,,,01/10/2017'], '83738383.AB.K': ['E29dceffb-38373-3839-8393-83038383,0743,438864,10/06/2016,7,PO,VC,4,37791,,,,01/11/2017']}