簡體   English   中英

從數字ID檢索名稱

[英]retrieving name from number ID

我有一個代碼,該代碼從在線獲取數據,在該數據中,項目由數字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]

所以現在,cleaned_dict等於:

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

*編輯添加第一句話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM