#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')
и работает нормально