从编号ID中检索名称

时间:2014-03-14 02:04:38

标签: python regex parsing text python-3.x

我有一个代码,可以从在线获取数据ID引用的数据,比较这些项目的数据,并根据某些条件构建项目ID号列表。我正在努力解决的问题是将这些数字列表转换为名单。我有一个带有数字和相应名称的文本文件但是使用它时遇到了麻烦,因为它包含多个单词的名称,并且当我尝试用python以任何方式解析文件时,在每行的末尾都保留\ n。文本文件如下所示:

number    name\n
14        apple\n
27        anjou pear\n
36        asian pear\n
7645      langsat\n

我尝试过split(),以及用几个不同的东西替换之间的空白无济于事。我之前问了一个问题,取得了很多进展,但仍然没有成功。建议的两种方法是:

d = dict()
f=open('file.txt', 'r')
for line in f:
    number, name = line.split(None,1)
    d[number] = name

这几乎有效,但仍然留给我\ n所以如果我打电话给d['14']我得到'apple\n'。另一种方法是:

import re
f=open('file.txt', 'r')
fr=f.read()
r=re.findall("(\w+)\s+(.+)", fr)

这似乎已经摆脱了每个名字末尾的\n,但让我遇到了一个元组问题,每个数字名称组合都是一个条目,所以如果我要说{{ 1}}我会得到r[1]。我真的不想在所有~8400个条目上手动删除每个新行命令......

有关如何从这样的文件中获取相应名称的任何建议?

3 个答案:

答案 0 :(得分:1)

在第一种方法中,将行ttn[number] = name更改为ttn[number] = name[:-1]。这只是删除了最后一个字符,应删除\n

答案 1 :(得分:0)

names = {}

with open("id_file.txt") as inf:
    header = next(inf, '')  # skip header row
    for line in inf:
        id, name = line.split(None, 1)
        names[int(id)] = name.strip()

names[27]    # => 'anjou pear'

答案 2 :(得分:0)

使用此方法修改您的第一种方法:

raw_dict = dict()
cleaned_dict = dict()

假设您已将文件导入字典:

raw_dict = {14:"apple\n",27:"anjou pear\n",36 :"asian pear\n" ,7645:"langsat\n"}


for keys in raw_dict:
    cleaned_dict[keys] = raw_dict[keys][:len(raw_dict[keys])-1]

所以现在,cleaning_dict等于:

{27: 'anjou pear', 36: 'asian pear', 7645: 'langsat', 14: 'apple'}

*编辑添加第一句话。