Python 从编号ID检索名称
我有一个代码,它从在线获取数据,其中项目由编号ID引用,比较关于这些项目的数据,并根据一些标准构建项目ID编号列表。我正在挣扎的是把这个数字列表变成一个名字列表。我有一个带有数字和相应名称的文本文件,但在使用它时遇到了问题,因为它包含多个单词名称,并且在我尝试用python以任何方式解析文件时,在每行末尾保留了\n。文本文件如下所示: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
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它将不会删除任何尾随空格。