好的,所以我有一个文件,其中包含ID号,如下所示:
10 alex de souza
11罗宾范佩西9 serhat akin
我需要读取此文件并将每个记录分成两个字段,即id和名称。我需要将条目存储在字典中,其中ID是密钥,名称是卫星数据。然后我需要在2列中输出每行一个条目,字典中的所有条目,按ID排序(数字)。 dict.keys和list.sort可能会有所帮助(我猜)。最后,输入文件名必须是第一个命令行参数。
感谢您的帮助!
到目前为止我有这个,但不能再进一步了。
Table
答案 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]