简体   繁体   中英

retrieving name from number ID

I have a code that takes data from online where items are referred to by a number ID, compared data about those items, and builds a list of item ID numbers based on some criteria. What I'm struggling with is taking this list of numbers and turning it into a list of names. I have a text file with the numbers and corresponding names but am having trouble using it because it contains multi-word names and retains the \\n at the end of each line when i try to parse the file in any way with python. the text file looks like this:

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

I have tried split(), as well as replacing the white space between with several difference things to no avail. I asked a question earlier which yielded a lot of progress but still didn't quite work. The two methods that were suggested were:

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

this almost worked but still left me with the \\n so if I call d['14'] i get 'apple\\n' . The other method was:

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

this seemed to have gotten rid of the \\n at the end of every name but leaves me with the problem of having a tuple with each number-name combo being a single entry so if i were to say r[1] i would get ('14', 'apple') . I really don't want to delete each new line command by hand on all ~8400 entries...

Any recommendations on how to get the corresponding name given a number from a file like this?

In your first method change the line ttn[number] = name to ttn[number] = name[:-1] . This simply strips off the last character, and should remove your \\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'

Use this to modify your first approach:

raw_dict = dict()
cleaned_dict = dict()

Assuming you've imported file to dictionary:

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]

So now, cleaned_dict is equal to:

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

*Edited to add first sentence.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM