将文本文件作为字典读入程序

2024-10-04 01:34:45 发布

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

使用Python3。你知道吗

我必须编写一个包含一个参数(字符串)的函数,并且必须从包含序列(键)和序列(值)名称的txt文件中返回字典。键和值都必须是字符串。你知道吗

文本文件:

Read1 GGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTCGTCCAGACCCCTAGC
Read2 CTTTACCCGGAAGAGCGGGACGCTGCCCTGCGCGATTCCAGGCTCCCCACGGG
Read4 TGCGAGGGAAGTGAAGTATTTGACCCTTTACCCGGAAGAGCG
Read3 GTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGTCGTGAACACATCAGT
Read5 CGATTCCAGGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTC
Read6 TGACAGTAGATCTCGTCCAGACCCCTAGCTGGTACGTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGT

我已经走了这么远,但我想我遗漏了一些东西,我不知道我在这里的工作是否正确。我已经用#标出了我怀疑它是否正确的地方。你知道吗

def read_data(file_name):
    input_file=open(sequencing_reads.txt)
    #sequence_dict={}
    for line in input_file:
        #x=line.split(",")
    #return sequence_dict
    input_file.close()

我知道它必须返回包含以下内容的词典:

{'Read1': 'GGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTCGTCCAGACCCCTAGC',
 'Read2': 'CTTTACCCGGAAGAGCGGGACGCTGCCCTGCGCGATTCCAGGCTCCCCACGGG',
 'Read4': 'TGCGAGGGAAGTGAAGTATTTGACCCTTTACCCGGAAGAGCG',
 'Read3': 'GTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGTCGTGAACACATCAGT',
 'Read5': 'CGATTCCAGGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTC',
 'Read6': 'TGACAGTAGATCTCGTCCAGACCCCTAGCTGGTACGTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGT'}

你能帮我填补空白吗?你知道吗

编辑:我需要保持简单,所以请不要进口的软件包和聪明的把戏:-)

编辑2:

我也试过这个:

with open('sequencing_reads.txt', 'r') as document:
    answer = {}
    for line in document:
        line = line.split()
        if not line:  
            continue
        answer[line[0]] = line[1:]
print(answer)

输出为:

{'Read1': ['GGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTCGTCCAGACCCCTAGC'], 'Read2': ['CTTTACCCGGAAGAGCGGGACGCTGCCCTGCGCGATTCCAGGCTCCCCACGGG'], 'Read4': ['TGCGAGGGAAGTGAAGTATTTGACCCTTTACCCGGAAGAGCG'], 'Read3': ['GTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGTCGTGAACACATCAGT'], 'Read5': ['CGATTCCAGGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTC'], 'Read6': ['TGACAGTAGATCTCGTCCAGACCCCTAGCTGGTACGTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGT']}

我如何去掉序列中的“[]”?你知道吗

编辑4:

def read_data(file_name):
    with open("sequencing_reads.txt", "r") as document:
        answer = {}
        for line in document:
            line = line.split()
            if not line:
                continue
                answer[line[0]] = line[1:]
                final_answer = {a:b[0] for a, b in answer.items()}
final_answer = read_data("sequencing_reads.txt")
print(final_answer)

印刷品:

None

Tags: answerintxtforline序列documentfile
3条回答

您的文件"sequencing_reads.txt"是json格式的。您可以使用python标准库中的json模块很容易地将内容加载到字典中。你知道吗

import json

with open("sequencing_reads.txt") as f:
    sequence_dict = json.load(f)

首先,如果您的文件是json格式的,并且在单独的行中,您应该将其读入一行,可能如下所示:

def read_data(file_name):
    lines = open(file_name).readlines()
    merged_line = " ".join([line.strip() for line in lines])

第二,法律json.loads文件字符串需要双引号(例如:{“a”:“a”})。如果使用单引号(如示例中所示),则可能会出现错误。所以你可以这样做:

# 1,use json.loads, but replace first
import json
merged_line = merged_line.replace("'", '"')
data = json.loads(merged_line)

# 2,use ast
import ast
data = ast.literal_eval(merged_line)

你可以试试这个:

import re
def read_data(file_name):
   data = open(file_name).read()
   keys = [filter(lambda x:bool(x), i)[0][1:-1] for i in re.findall("{(.*?)\:|(?<=,\n\s)(.*?)\:", data)]
   values = [filter(lambda x:bool(x), i)[0][1:-1] for i in re.findall('(?<=:\s)(.*?)(?=,\n)|(?<=\s)(.*?)(?=})', data)]
   final_data = {a:b for a, b in zip(keys, values)}
   return final_data

输出:

{'Read1': 'GGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTCGTCCAGACCCCTAGC', 'Read3': 'GTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGTCGTGAACACATCAGT', 'Read2': 'CTTTACCCGGAAGAGCGGGACGCTGCCCTGCGCGATTCCAGGCTCCCCACGGG', 'Read5': 'CGATTCCAGGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTC', 'Read4': 'TGCGAGGGAAGTGAAGTATTTGACCCTTTACCCGGAAGAGCG', 'Read6': "'Read6': 'TGACAGTAGATCTCGTCCAGACCCCTAGCTGGTACGTCTTCAGTAGAAAATTGTTTTTTTCTTCCAAGAGGTCGGAGT"}

编辑:

import ast 
def read_data(file_name):
   final_data = ast.literal_eval(open(file_name).read())
   return final_data

编辑1:关于删除括号,只需通过索引访问值:

final_answer = {a:b[0] for a, b in answer.items()}
print(final_answer)

如果打印从read_data返回的值时遇到问题,可以尝试以下方法:

answer = read_data("the_file.txt")
print(answer)

编辑3:

def read_data(file_name):
   with open(file_name, "r") as document:
      answer = {}
      for line in document:
         line = line.split()
         if line:
            answer[line[0]] = line[1:]
      return {a:b[0] for a, b in answer.items()}

print(read_data("sequencing_reads.txt"))

相关问题 更多 >