【发布时间】: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_csv、pd.read_json、pd.merge),您尝试做的事情将非常简单,但您确实需要更好地描述您的问题,并提供一致的数据子集(这意味着第一个文件中的 Gene_Aminoacids 可以在第二个文件中找到)。而且,您的 python 示例代码没有正确缩进。由于缩进在 python 中具有意义,因此尚不清楚程序在做什么(或至少是模棱两可的)。