【问题标题】:Match keys in json file with csv files将 json 文件中的键与 csv 文件匹配
【发布时间】:2022-11-07 18:08:05
【问题描述】:

我是编程新手,目前正在写论文。

我正在处理多个 csv 文件和一个 json 文件,其中包含与抗生素抗性有关的氨基酸变化的基因。 csv 文件的格式如下:

Gene_Aminoacids Filename
gyrA_S95T   SRR9851427
tlyA_L11L   SRR9851427
katG_R463L  SRR9851427

在 json 文件中,基因作为键存在,其影响的相应抗生素被设置为值。

Ex json 文件的一小部分。

"gyrA_A74S" : ["Quinolones"],
"gyrA_D89X" : ["Quinolones"],
"tlyA_C-83T" : ["Capreomycin"]
"katG_R104Q" : ["Isoniazid"],
"katG_S315I" : ["Isoniazid"],
"katG_S315N" : ["Isoniazid"],
  etc.... 

我感兴趣的是从 csv 文件中的 json 文件中找到匹配的基因。输出应包含键,即基因、相应的抗生素以及包含 a.a 更改的文件名(文件)。

想要的输出的前

 Gene_Aminoacids Antibiotic  Filename` 
 "katG_R104Q" : ["Isoniazid"], SRR9851427

到目前为止,这是我编写的代码,我已经研究了类似的问题,但它们对我的数据不起作用。

def retrive_rest_mutations(jsonfile): 
with open(jsonfile) as data_file:
    data = json.load(data_file)    
    return(data.keys())

mutation_keys = retrive_rest_mutations("tb_TEST.json")

 ##Read & set path to folder containing a.a changes 

 path = "Replaced_P_G.ann.vcf"
 samp = glob.glob(path + "/*_G.P.vcf_replaced.txt")

###Read text files
result = []

def read_text_file(file_path):
     with open(file_path, 'r') as f:
          print(f.read())

##iterate through all files
def all_files():
for file in os.listdir():
    if file.endswith(".txt"):
        file_path = f"{samp}/{file}"
        read_text_file(file_path)
print("\n")

我不确定如何在 json 文件和多个 csv 文件之间进行匹配,我的问题可能有一个简单的解决方案。

剂量任何人可能有一个建议,或者我应该研究什么以获得包含基因+抗生素+文件名的新输出?

此致

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。
  • 出现了很多问题。同一个基因例如gyrA_S95T可以出现在几个CSV文件中吗?然后我们必须更多地了解数据量。你有多少个 CSV 文件?您有多少 CSV 行(所有 CSV 文件的总数)? JSON文件的大小是多少?您要进行多少次查找?根据回答,解决方案可能是在内存中构建足够的数据结构或填充数据库。
  • 使用 pandas(pd.read_csvpd.read_jsonpd.merge),您尝试做的事情将非常简单,但您确实需要更好地描述您的问题,并提供一致的数据子集(这意味着第一个文件中的 Gene_Aminoacids 可以在第二个文件中找到)。而且,您的 python 示例代码没有正确缩进。由于缩进在 python 中具有意义,因此尚不清楚程序在做什么(或至少是模棱两可的)。

标签: python key match


【解决方案1】:

让我给你介绍Pandas

pandas 是一个为 Python 编程编写的软件库 用于数据操作和分析的语言

只需使用 pandas 读取文件并进行相应更改

import pandas as pd
import json
df =pd.read_csv(r"Kristina Cvetanoska.csv")
#print(df)

data = pd.read_csv('sam.txt', sep=':',header =None)

dfs= pd.concat([df, data], axis=1)
dfs=dfs.fillna(method='ffill')


dfs['final']= dfs['Filename']+' '+ dfs[0]+' ' +dfs[1]

print(dfs['final'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多