Python 从编号ID检索名称

Python 从编号ID检索名称,python,regex,parsing,text,python-3.x,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

我有一个代码,它从在线获取数据,其中项目由编号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
,但给我留下了一个问题,即每个数字名称组合都是一个单一条目,因此如果我说
r[1]
,我会得到
('14','apple')
。我真的不想手动删除所有8400个条目上的每个新行命令


关于如何从这样的文件中获取给定数字的相应名称的任何建议?

在第一种方法中,将行
ttn[number]=name
更改为
ttn[number]=name[:-1]
。这只需去掉最后一个字符,就可以删除您的
\n

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

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'
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]
那么现在,u dict等于:

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

*编辑以添加第一句话。

尝试:
number,name=line.strip().split(无,1)
。。。与您的代码一样工作,但除此之外,
strip()
将删除换行符。
'any\u text\n'。对于我的,如果文件中的最后一行没有换行符,您将丢失姓氏的最后一个字母,并且如果在前有任何尾随空格,\n它将不会删除任何尾随空格。