Объединение файлов, которые частично совпадают по имени в Python - PullRequest
0 голосов
/ 17 апреля 2020

Я нахожусь в ситуации, когда у меня есть большое количество файлов. Мне нужно объединить эти файлы на основе совпадающих частей их имен. Я должен объединить любой из 5 файлов с именем Streptococcus_salivarius и любой из 10 файлов с именем Streptococcus_thermophilus для каждого номера ATGC008.COGXXXX, а затем создать новый файл из этих слияний. Каталог, содержащий файлы и их схему именования, выглядит как this , а отдельный файл будет выглядеть как this .

. Я могу довольно легко конвертировать файлы в формат .fasta. если какое-либо решение требует этого.

Сначала я использовал более ручной подход к объединению файлов в python, копированию и вставке их имен в сценарий, но с 872 комбинациями, которые необходимо было сделать, это вскоре оказалось невероятно чертовски. Поэтому я попытался автоматизировать процесс, рисуя непосредственно из каталога, содержащего файл, и произвел это:

import os
os.chdir("F:\PostGrad_Research\Programming_Files\Dumped_Files\Phylip_OG")
strainsToMerge = ['Streptococcus_thermophilus', 'Streptococcus_salivarius']
              #a list fo the strains that you want to access
for cogNumber in range(maxCogNumber):
    for i in range(2):
            filename = open('ATGC008.COG'+str(cogNumber)+ '.phy','w') #construct the filename to access the file
    infile = open(filename,'r')          #open the file
    sequences = infile.read()            #read the file
    subSequences = re.split('\w+',sequences)     #split the file with the header
    firstSequence[i] = subSequences[i].strip()   #extract the first sequence and make sure you've got rid of the whitespace at the start and end
    firstSequence[i] = re.sub('[\r\n]','',firstSequence[i])

outfile = open('ATGC008.COG'+str(cogNumber)+ '.phy','w')
    outfile.write('2 '+str(len(firstSequence[0])+'\n'))
    for i in range(2):
            outfile.write(firstSequence[i]+'\n'))
    outfile.close()

Я получаю следующую ошибку:

Traceback (most recent call last):
File "F:\PostGrad_Research\Programming_Files\Merge_Fasta.py", line 8, in <module>
for cogNumber in range(max.cogNumber):
AttributeError: 'builtin_function_or_method' object has no attribute 'cogNumber'

Любая и вся помощь / Совет будет принята с благодарностью.

1 Ответ

2 голосов
/ 18 апреля 2020
   import os
    os.chdir("F:\PostGrad_Research\Programming_Files\Dumped_Files\Phylip_OG")
    strainsToMerge = ['Streptococcus_thermophilus', 'Streptococcus_salivarius']
                  #a list fo the strains that you want to access
    maxCogNumber=1092
    for cogNumber in range(1,maxCogNumber+1):
        a=''
        if 1<=cogNumber<10:
            a='000'+str(cogNumber)
        elif 10<=cogNumber<100:
            a='00'+str(cogNumber)
        elif 100<=cogNumber<1000:
            a='0'+str(cogNumber)
        else:
            a=str(cogNumber)
        for i in range(2):
                filename = open('ATGC008.COG'+a+ '.phy','w') #construct the filename to access the file
        infile = open(filename,'r')          #open the file
        sequences = infile.read()            #read the file
        subSequences = re.split('\w+',sequences)     #split the file with the header
        firstSequence[i] = subSequences[i].strip()   #extract the first sequence and make sure you've got rid of the whitespace at the start and end
        firstSequence[i] = re.sub('[\r\n]','',firstSequence[i])

    outfile = open('ATGC008.COG'+a+ '.phy','w')
        outfile.write('2 '+str(len(firstSequence[0])+'\n'))
        for i in range(2):
                outfile.write(firstSequence[i]+'\n'))
        outfile.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...