在Python2.7中将字符串和整数从.txt文件存储到字典

2024-03-29 13:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想让我的程序获取亚种名称(例如“Ablepharus bivittatus”),并将其存储为字符串键。然后我想让程序把下面几行序列id(整数)向上推到下一个亚种标题。整数将被存储为最初在上面抓取的亚种键的值。你知道吗

我希望程序能够提示用户输入一个字符串,然后通过所有的字典键搜索输入,找到一个完全匹配的(区分大小写,这里拼写很重要),然后返回序列ID。你知道吗

最有效的方法是什么?现在我可以分离这两个实体(id和亚种名称),但是我不知道如何创建一个字典来存储这些值,同时在文本文件上进行迭代。你知道吗

有些行包含相同的名称,但重复了多次,我如何才能告诉程序检测到,并只匹配多个相同的亚种名称中的第一个作为一个字符串键?你知道吗

文本文件的格式如下

谢谢你的时间

Ablepharus bivittatus   
36630
31764
31212
01996
09953
03744
14036
16094
01875
19076
09496
20583
24160
23142
26892
06533
05488
Ablepharus chernovi Ablepharus chernovi chernovi DAREVSKY 1953
Ablepharus chernovi eiselti SCHMIDTLER 1997
Ablepharus chernovi isauriensis SCHMIDTLER 1997
Ablepharus chernovi ressli SCHMIDTLER 1997
31212
01996
09637
14036
20583
23142
21989
26892
28697
09207
09206
Ablepharus darvazi  
06245
26892

这是我到目前为止一直在处理的一些代码。你知道吗

dictionary = {}

with open("repCleanSubs2.txt") as file:
    for line in file:
        (key, val) = line.split()
        dictionary[val(key)] = val
print key(1)







'''import re
file = open('repCleanSubs2.txt')
subspecies = []
dnaIDs = []
for line in file:
    match = re.findall('^[a-zA-Z]+', line)
        if match:
            subspecies.append(line)
            #Grab sequence IDs under this line ^ 
            #
            #Until you reach next string match





print dnaIDs
#userInput = raw_input("Which subspecies would you like to view?: ")
#if userInput == re.match(subspecies(line)):
#   print subspecies(line)'''
# print sequences IDs from the line grabbed here ^`

Tags: key字符串程序re名称matchlineval
1条回答
网友
1楼 · 发布于 2024-03-29 13:22:20
  1. 您可能需要使用file.read().splitlines()来获取行的列表。你知道吗
  2. 遍历这些线并检查它们是一个新的亚种还是一个ID似乎是最合适的。你知道吗
  3. 然后可以在迭代期间使用“current”名称作为字典键,并将新ID添加到该列表中。你知道吗

这似乎符合你的要求:

import re


data = {}
lines = []

with open("data.txt") as f:
    lines = f.read().splitlines()
name = ""
for l in lines:
    if re.match("\d{5}", l):
        data[name].append(l)
    else:
        name = l.strip()
        data[name] = []

print data

结果如下:

{
    "Ablepharus chernovi isauriensis SCHMIDTLER 1997": [], 
    "Ablepharus bivittatus": [
        "36630", 
        "31764", 
        "31212", 
        "01996", 
        "09953", 
        "03744", 
        "14036", 
        "16094", 
        "01875", 
        "19076", 
        "09496", 
        "20583", 
        "24160", 
        "23142", 
        "26892", 
        "06533", 
        "05488"
    ], 
    "Ablepharus chernovi ressli SCHMIDTLER 1997": [
        "31212", 
        "01996", 
        "09637", 
        "14036", 
        "20583", 
        "23142", 
        "21989", 
        "26892", 
        "28697", 
        "09207", 
        "09206"
    ], 
    "Ablepharus darvazi": [
        "06245", 
        "26892"
    ], 
    "Ablepharus chernovi eiselti SCHMIDTLER 1997": [], 
    "Ablepharus chernovi Ablepharus chernovi chernovi DAREVSKY 1953": []
}

我不确定你所说的某些行包含重复的相同名称是什么意思,如果你能详细说明这一点,并指出你的预期输出,那么就可以合并。你知道吗

最后,返回用户提供的给定密钥的序列ID如下所示:

print(data[raw_input()])

相关问题 更多 >