Python разбивает текстовый файл на разные текстовые файлы, когда строка начинается с определенного символа

#python #pandas

Вопрос:

У меня есть следующий txt-файл, сгенерированный инструментом: https://www.dropbox.com/s/01rx9fk5e64y4b1/Test.txt?dl=0

Каждый раз, когда я провожу эксперимент, программное обеспечение прибора добавляет заголовок, начинающийся с»//», за которым следуют полученные данные в один и тот же файл txt. Поэтому приведенный выше txt — файл содержит множество различных экспериментов, которые разделены заголовком. Мне нужно разделить приведенный выше файл на разные txt-файлы, каждый из которых содержит только один эксперимент и включает заголовок.

Будет ли лучшей стратегией считывание файла строка за строкой и создание нового txt-файла каждый раз, когда программа встречает первую строку, начинающуюся с «//»? Может быть, есть лучший способ использовать Панд? Любые предложения были бы очень признательны.

Ответ №1:

Любые предложения были бы очень признательны.

Я изучил ваш файл, и, похоже, каждому заголовку предшествует пустая строка, поэтому я предлагаю использовать этот факт следующим образом

 fileno = 0
inputfile = open('Test.txt', 'r')
outfile = open(f'out{fileno}.txt', 'w')
for line in inputfile:
    if not line.strip():
        fileno  = 1
        outfile.close()
        outfile = open(f'out{fileno}.txt', 'w')
    else:
        outfile.write(line)
outfile.close()
inputfile.close()
 

Пояснение: обрабатывайте построчно, чтобы не нужно было загружать весь файл в память, если в пустой строке обнаружена ошибка, закройте текущий выходной файл и подготовьте новый выходной файл со следующим номером. Отказ от ответственности: Я использовал так называемые f-строки, поэтому требуется Python 3.6 или новее.

Комментарии:

1. Привет, Давео, большое тебе спасибо за твое умное предложение и быстрый ответ. Это именно то, что мне было нужно. Когда я пробую ваш код, он выдает мне ошибку: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 895: invalid start byte . Я только что изменил строку 2 следующим образом: inputfile = open('Test.txt', 'r', encoding='gbk') и работает нормально