读取文件并将其解析为部分

时间:2015-10-17 17:56:33

标签: python

好的,所以我有一个文件,其中包含ID号,如下所示:

10 alex de souza

11罗宾范佩西

9 serhat akin

我需要读取此文件并将每个记录分成两个字段,即id和名称。我需要将条目存储在字典中,其中ID是密钥,名称是卫星数据。然后我需要在2列中输出每行一个条目,字典中的所有条目,按ID排序(数字)。 dict.keys和list.sort可能会有所帮助(我猜)。最后,输入文件名必须是第一个命令行参数。

感谢您的帮助!

到目前为止我有这个,但不能再进一步了。

Table

2 个答案:

答案 0 :(得分:0)

我们需要sys.argv来获取命令行参数(小心,脚本的名称始终是返回列表的第0个元素)。

现在我们打开文件(没有错误处理,你应该添加它)并单独读取行。现在,我们在“行”列表中为每行提供了“number firstname secondname”字符串。

然后打开一个空字典并循环遍历各行中的字符串,将它们分割成每个空格并将它们存储在临时变量tmp中(现在是一个字符串列表:('number','firstname','secondname “))。 接下来我们只填充字典,使用数字作为键,并将空格连接的其余名称作为值。

要打印字典,只需循环遍历sorted(out)返回的数字列表,使用key = int选项进行数字排序。然后通过使用id的字符串表示调用字典来打印id(数字),然后打印相应的值。

import sys

try:
    infile = sys.argv[1]
except IndexError:
    infile = input('Enter file name: ')

with open(infile, 'r') as file:
    lines = file.readlines()

out = {}  
for fullstr in lines:
    tmp = fullstr.split()
    out[tmp[0]] = ' '.join(tmp[1:])

for id in sorted(out, key=int):
    print id, out[str(id)]

这适用于带有ASCII字符串的python 2.7。我很确定它应该能够处理其他编码(至少德国的Umlaute工作),但我无法进一步测试。如果输入文件的格式不同,您可能还需要添加大量错误处理。

答案 1 :(得分:0)

只是一个建议,这段代码可能比发布的其他代码更简单:

import sys
with open(sys.argv[1], "r") as handle:
    lines = handle.readlines()
data = dict([i.strip().split(' ', 1) for i in lines])

for idx in sorted(data, key=int):
    print idx, data[idx]