Создать несколько файлов из одного файла в Python - PullRequest
0 голосов
/ 20 августа 2009

У меня есть файл, как показано ниже.

Последовательность A.1.1 Бактерии
ATGCGCGATATAGGCCT
ATTATGCGCGCGCGC

Sequence A.1.2 Virus
ATATATGCGCCGCGCGTA
ATATATATGCGCGCCGGC

Последовательность B.1.21 Шимпанзе
ATATAGCGCGCGCGCGAT
ATATATATGCGCG

Последовательность C.21.4 Человек
ATATATATGCCGCGCG
ATATAATATC

Я хочу сделать отдельные файлы для последовательностей категорий A, B и C из одного файла. Пожалуйста, предложите некоторые материалы для чтения для взлома этого кода. Благодарю. Выходными данными должны быть три файла: один для «A», второй для «Последовательностей» с «B» и третий для последовательностей с «C».

Ответы [ 2 ]

2 голосов
/ 20 августа 2009

Не на 100% ясно, что вы хотите сделать, но что-то вроде:

currout = None
seqname2file = dict()

for line in open('thefilewhosenameyoudonottellus.txt'):
  if line.startswith('Sequence '):    
    seqname = line[9]  # A or B or C
    if seqname not in seqname2file:
      filename = 'outputfileforsequence_%s.txt' % seqname
      seqname2file[seqname] = open(filename, 'w')
    currout = seqname2file[seqname]
  currout.write(line)

for f in seqname2file.values():
  f.close()

должно быть достаточно близко - если вы хотите три отдельных файла (по одному для A, B и C), которые среди них содержат все строки из входного файла, это почти готово, за исключением того, что вам, вероятно, понадобятся лучшие имена (но вы не дадите нам секрета того, что это может быть ;-), в противном случае некоторые хитрости должны его получить.

Кстати, это всегда очень помогает (чтобы помочь вам более эффективно, чем спотыкаться в темноте и угадывать), если вы также приводите примеры того, какие результаты вы хотите получить для примера входных данных, который вы даете!

0 голосов
/ 20 августа 2009

Я не уверен, какой именно вывод вы хотите получить, но звучит так, будто вам нужно что-то вроде:

#!/usr/bin/python

# Open the input file
fhIn = open("input_file.txt", "r")

# Open the output files and store their handles in a dictionary
fhOut = {}
fhOut['A'] = open("sequence_a.txt", "w")
fhOut['B'] = open("sequence_b.txt", "w")
fhOut['C'] = open("sequence_c.txt", "w")

# Create a regexp to find the line naming the sequence
Matcher = re.compile(r'^Sequence (?P<sequence>[A-C])')

# Iterate through each line in the file
CurrentSequence = None
for line in fhIn:
    # If the line is a sequence identifier...
    m = Matcher.match(line)
    if m is not None:
        # Select the appropriate sequence from the regexp match
        CurrentSequence = m.group('sequence')
    # Uncomment the following two lines to skip blank lines
    # elif len(line.strip()) == 0:
    #     pass
    # Print out the line to the current sequence output file
    # (change to else if you don't want to print the sequence titles)
    if CurrentSequence is not None:
        fhOut[CurrentSequence].write(line)

# Close all the file handles
fhIn.close()
fhOut['A'].close()
fhOut['B'].close()
fhOut['C'].close()

Полностью не проверено, хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...