【问题标题】:retrieving name from number ID从号码 ID 中检索姓名
【发布时间】:2014-03-14 02:04:38
【问题描述】:

我有一个代码,它从网上获取数据,其中项目由数字 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 个条目上手动删除每个新行命令...

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

【问题讨论】:

  • try: number, name = line.strip().split(None,1)... 作为您的代码,但另外 strip() 将删除换行符。

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


【解决方案1】:

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

【讨论】:

  • 'any_text\n'.rstrip() 也会这样做,同时删除其他右侧空格
  • 正如其他人所建议的,strip 或 rstrip 可能是更好的解决方案。使用我的,如果文件中的最后一行没有换行符,您将丢失姓氏的最后一个字母,并且如果在 \n 之前有任何尾随空格,它将不会删除任何尾随空格。
【解决方案2】:
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'

【讨论】:

    【解决方案3】:

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

    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]
    

    所以现在,cleaned_dict 等于:

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

    *编辑添加第一句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      相关资源
      最近更新 更多