使用Python根据另一个文件中的字符串重命名文件夹中的文件

2024-09-28 05:15:45 发布

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

我在做一个生物信息学的研究,在那里我处理一些数据,把一些输出放到一些想要的文件夹里。文件夹/文件结构如下所示, 对于其中两个文件夹:

binned/90-20-09-2018/bins/90-20-09-2018.001、90-20-09-2018.002、90-20-09-2018.003等

binned/90-25-04-2018/bins/90-25-04-2018.001、90-25-04-2018.002、90-25-04-2018.003等

我知道文件夹的数量,但是文件夹中的文件数量是未知的,并且会有所不同。你知道吗

在另一个名为分类法的文件中(例如binned/90-20-09-2018/bins/quality/分类.txt)是每个箱子的细菌名称表(文件名为90-20-09-2018.001、90-20-09-2018.002等)。如您所见,对于每个bin ID,都有一个对应的分类法。你知道吗

----------------------------------------------------------------------------------------------------------------------------------------------------------------------
  Bin Id              # unique markers (of 43)   # multi-copy   Taxonomy                                                                                              
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
  90-20-09-2018.001              25                   15        k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactobacillales;f__Lactobacillaceae;g__Lactobacillus          
  90-20-09-2018.003              24                   0         k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactobacillales;f__Streptococcaceae;g__Streptococcus          
  90-20-09-2018.002              15                   0         k__Bacteria;p__Firmicutes;c__Bacilli;o__Lactobacillales;f__Lactobacillaceae_2;g__Lactobacillus_2      
  90-20-09-2018.005              14                   11        k__Bacteria;p__Firmicutes;c__Clostridia;o__Clostridiales;f__Lachnospiraceae                           
  90-20-09-2018.004              12                   0         k__Bacteria;p__Actinobacteria;c__Actinobacteria;o__Actinomycetales;f__Actinomycetaceae;g__Mobiluncus  
----------------------------------------------------------------------------------------------------------------------------------------------------------------------

我需要的是将每个bin文件(90-20-09-2018.001、90-20-09-2018.002等)重命名为相应的分类(属)名称。属名是在“g”之后的名称。所以对于BIN001,应该是“乳酸杆菌”。你知道吗

最后的结果是这样的(对于第一个文件夹)。你知道吗

binned/90-20-09-2018/bins/乳酸杆菌、乳酸杆菌2、链球菌

我想象这是用Python(我唯一熟悉的编程语言)完成的 如果我不太清楚的话,请随便问问题。你知道吗

谢谢!你知道吗


Tags: 文件文件夹名称数量bin分类分类法bins
1条回答
网友
1楼 · 发布于 2024-09-28 05:15:45

所以我给你的是:

import pandas as pd
import glob
from os.path import split, splitext
from os import rename

directory = r'D:\Research and Teaching\ZZ General\Python\binned\90-20-09-2018'

fastas = r'\bins\*.fasta'

taxonomy = r'\quality\*.txt'

fasta_dir = {splitext(split(fasta_file)[1])[0]: fasta_file 
             for fasta_file in glob.glob(directory+fastas)}

tax = pd.read_table(glob.glob(directory+taxonomy)[0]).to_numpy()

data = {count: [item for item in tax[count][0].split(' ') if item != '']
        for count, line in enumerate(tax)}

files = {data[item][0]: data[item][-1].split(';')[-1] 
        for item in data if data[item][0] != data[item][-1]}

for key in fasta_dir:
    rename(fasta_dir[key], split(fasta_dir[key])[0]+'\\'+files[key]+r'.fasta')

基本上,我们所做的是创建输入文件字符串的字典和分类法文件中的generas(实际上,最精确的分类法,因为可以看到,有时你的解析只涉及到家族),并将这些dictonary与操作系统重命名“指挥部,为我们交换名字。你知道吗

这应该适用于任何bin文件夹,只要它们具有相同的结构:即bin和quality->;fasta文件和分类法文件。只需将目录指向相应的bin即可。此外,导入依赖于被指定为.txt文件的分类法文件,因此如果在操作系统中没有明确的说明,则需要重命名它。你知道吗

结果是:

enter image description here

相关问题 更多 >

    热门问题