繁体   English   中英

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

[英]reading a file and parse them into section

好的,所以我有一个包含ID号的文件,其名称后面跟着这样的名称:

10亚历克斯·德·苏扎

11罗宾·范佩西

9种类似

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

谢谢你的帮助!

到目前为止,我已经做到了,但是不能再进一步了。

fin = open("ids","r")    #Read the file

for line in fin:           #Split lines 

string = str.split()

if len(string) > 1:           #Seperate names and grades

id = map(int, string[0]

name = string[1:]

print(id, name) #Print results

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

现在,我们打开文件(没有错误处理,应该添加该文件)并逐行读取。 现在,“行”列表中的每一行都有“ number firstname secondname”字符串。

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

要打印已排序的字典,只需使用key = int选项进行数字排序即可循环遍历sorted(out)返回的数字列表。 然后通过使用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可以工作),但是我无法对其进行进一步的测试。 如果输入文件的格式有所不同,您可能还想添加很多错误处理。

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

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM