Разбор простого текстового файла в CSV-файл с использованием Python

У меня есть серия HTML-файлов, которые обрабатываются в один текстовый файл с помощью Beautiful Soup. Файлы HTML отформатированы таким образом, что их вывод всегда состоит из трех строк в текстовом файле, поэтому результат будет выглядеть примерно так:

Hello! How are you? Well, Bye! 

Но так же легко было бы

 83957 And I ain't coming back! hgu39hgd 

Другими словами, содержимое файлов HTML не является стандартным для каждого из них, но они всегда производят три строки.

Поэтому мне было интересно, куда я должен начать, если захочу, чтобы затем взять текстовый файл, который был создан из Beautiful Soup, и проанализировать его в CSV-файл с такими столбцами, как (используя приведенные выше примеры):

 Title Intro Tagline Hello! How are you? Well, Bye! 83957 And I ain't coming back! hgu39hgd 

Код Python для удаления HTML из текстовых файлов:

 import os import glob import codecs import csv from bs4 import BeautifulSoup path = "c:\\users\\me\\downloads\\" for infile in glob.glob(os.path.join(path, "*.html")): markup = (infile) soup = BeautifulSoup(codecs.open(markup, "r", "utf-8").read()) with open("extracted.txt", "a") as myfile: myfile.write(soup.get_text()) 

И я понимаю, что могу использовать это, чтобы настроить столбцы в моем файле CSV:

 csv.put_HasColumnNames(True) csv.SetColumnName(0,"title") csv.SetColumnName(1,"intro") csv.SetColumnName(2,"tagline") 

Где я рисую пустым, так это то, как перебирать текстовый файл (extract.txt) по одной строке за раз, и, по мере того, как я попадаю в новую строку, установите его в правильную ячейку в файле CSV. Первые несколько строк файла пусты, и между каждой группировкой текста существует много пустых строк. Итак, сначала мне нужно будет открыть файл и прочитать его:

 file = open("extracted.txt") for line in file.xreadlines(): pass # csv.SetCell(0,0 X) (obviously, I don't know what to put in X) 

Кроме того, я не знаю, как сказать Python просто продолжать читать файл и добавлять в файл CSV до его завершения. Другими словами, нет способа точно узнать, сколько общих строк будет в файлах HTML, и поэтому я не могу просто csv.SetCell(0,0) to cdv.SetCell(999,999)

2 Solutions collect form web for “Разбор простого текстового файла в CSV-файл с использованием Python”

Я не совсем уверен, какую библиотеку CSV вы используете, но она не похожа на встроенную в Python . Во всяком случае, вот как я это сделаю:

 import csv import itertools with open('extracted.txt', 'r') as in_file: stripped = (line.strip() for line in in_file) lines = (line for line in stripped if line) grouped = itertools.izip(*[lines] * 3) with open('extracted.csv', 'w') as out_file: writer = csv.writer(out_file) writer.writerow(('title', 'intro', 'tagline')) writer.writerows(grouped) 

Этот тип делает трубопровод. Сначала он получает данные из файла, затем удаляет все пробелы из строк, затем удаляет любые пустые строки, затем группирует их по группам из трех, а затем (после записи заголовка CSV) записывает эти группы в файл CSV.

Чтобы объединить последние два столбца, как вы упомянули в комментариях, вы можете поменять вызов writerow очевидным образом и writerows :

 writer.writerows((title, intro + tagline) for title, intro, tagline in grouped) 

Возможно, я не понял вас правильно, но вы можете сделать:

 file = open("extracted.txt") # if you don't want to do .strip() again, just create a list of the stripped # lines first. lines = [line.strip() for line in file if line.strip()] for i, line in enumerate(lines): csv.SetCell(i % 3, line) 
Interesting Posts

Это правильный способ импорта скриптов python, находящихся в произвольных папках?

Кодировка Stdout в python

Использование списков саморегуляции

Вложенный список и счетчик ()

Как перебрать выбор полей формы и отобразить связанные с ними экземпляры экземпляра модели

CouchDB – фильтр последнего журнала для каждого зарегистрированного экземпляра из списка

Механизм приложения Google, максимальное количество статических файлов?

Удаление дубликатов из вложенного списка на основе первых 2 элементов

Ускорение для цикла с numpy

Как я могу добавить инструкцию печати к этому коду без получения ошибки отступа

Как запустить файл python, который считывается в std :: string, используя PyRun

_pickle в python3 не работает для большой экономии данных

Django REST Framework – Сериализация необязательных полей

Используя PyCharm Professional и Vagrant, как мне запустить сервер Django?

Django: GET css возвращает 404?

Python - лучший язык программирования в мире.