Python,使用字典将数据组合为两个文件的匹配部分

Posted

技术标签:

【中文标题】Python,使用字典将数据组合为两个文件的匹配部分【英文标题】:Python, combining data as a matching part of two files using a dictionary 【发布时间】:2022-01-20 04:46:50 【问题描述】:

输入 1:

Aa  Ab,Ac,Information1
Ba  Bb,Bc,Information2
Ca  Cb,Cc,Information3

输入 2:

ID 
A1
A2 information3
A3 asdfasdf
A3 vlkmgoie
//
ID
A1
A2 information2
A3 opjnbiube
A3 plwikjnd
//

预期输出:

>Aa,Ab,Ac,Information1

>Ba,Bb,Bc,Information2
A3 opjnbiube
A3 plwikjnd
>Ca,Cb,Cc,Information3
A3 asdfasdf
A3 vlkmgoie

代码:

dictionary = 
with open(input_file1, 'r') as input1:
    for line in input1:
        replaced_line = '>' + line.replace('\t', ',').strip()
        id = replaced_line.strip().split(',')[-1]
        dictionary[id] = id


with open(input_file2, 'r') as input2:
    for block in input2.read().split('//'): 
        
        for k in dictionary.keys():
            keys_from_id = k

            if keys_from_id in block:

首先,我只提取了 input_file1 末尾的信息。其次,块(单位)是根据 Input_file2 中的“//”制作的。在这种情况下,如果 input_file2 中的块包含从 input_file1 提取的信息,我想在 input_file1 的每一行下方写入块的一部分内容,例如“预期输出”。那么,我的问题是如何通过匹配 input_file2 的块内容,将 input_file1 中提取的信息保存为字典?

【问题讨论】:

【参考方案1】:

你可以这样做:

import re

s1 = "Aa  Ab,Ac,Information1\nBa  Bb,Bc,Information2\nCa  Cb,Cc,Information3"
s2 = "ID\nA1\nA2 information3\nA3 asdfasdf\nA3 vlkmgoi\n//\nID\nA1\nA2 information2\nA3 opjnbiube\nA3 plwikjnd//"

pattern = re.compile("(information\d+)(.*)", re.IGNORECASE|re.DOTALL)

d1 = x[-1]:re.sub("[ ]+", ",", ",".join(x)) for x in list(map(lambda x:x.split(","), s1.split("\n")))
d2 = x[0][0].capitalize(): x[0][1].strip().split("\n") for x in map(lambda x: pattern.findall(x), s2.split("//")) if len(x) == 1

for k, v in d1.items():
    print(f'>v')
    print("\n".join(d2.get(k, "")))

【讨论】:

以上是关于Python,使用字典将数据组合为两个文件的匹配部分的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个不同的训练有素的 ML 模型组合为一个?

将两个查询与计数函数组合为一个结果集

在 Python 中将 3 个单独的 numpy 数组组合为 RGB 图像

将多个复杂图组合为单个图形中的面板

将两个 SQL 查询的结果组合为单独的列

我正在尝试将两个不同的列表视图 Streambuilders 组合为一个屏幕