我有一个代码,可以从在线获取数据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个条目上手动删除每个新行命令......
有关如何从这样的文件中获取相应名称的任何建议?
答案 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'}
*编辑添加第一句话。