Mam serię plików HTML, które są przetwarzane w pojedynczy plik tekstowy za pomocą Beautiful Soup. Pliki HTML są sformatowane tak, że ich produkcja jest zawsze trzy wiersze w pliku tekstowym, więc wyjście będzie wyglądać następująco:Parsowanie zwykłego pliku tekstowego do pliku CSV przy użyciu Pythona
Hello!
How are you?
Well, Bye!
Ale może to być równie dobrze
83957
And I ain't coming back!
hgu39hgd
Innymi słowy , zawartość plików HTML nie jest tak naprawdę standardowa dla każdego z nich, ale zawsze tworzą trzy linie.
Tak, zastanawiałem się, gdzie mam zacząć, jeśli chcę, aby następnie podjąć plik tekstowy, który jest produkowany od pięknego Soup i analizowania że do pliku CSV z kolumnami takimi jak (stosując powyższe przykłady):
Title Intro Tagline
Hello! How are you? Well, Bye!
83957 And I ain't coming back! hgu39hgd
kod
Pythona do odpędzania HTML z plików tekstowych jest taka:
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())
I zbierać mogę to wykorzystać, aby ustawić kolumny w moim pliku CSV:
csv.put_HasColumnNames(True)
csv.SetColumnName(0,"title")
csv.SetColumnName(1,"intro")
csv.SetColumnName(2,"tagline")
Miejsce, w którym rysuję puste miejsce, polega na iteracji po pliku tekstowym (extract.txt) po jednej linii naraz, a gdy dojdę do nowej linii, ustaw ją w odpowiedniej komórce w pliku CSV. Pierwsze kilka wierszy pliku jest pustych, a pomiędzy grupami tekstu znajduje się wiele pustych wierszy. Tak więc, najpierw musiałbym otworzyć plik i odczytać go:
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)
Również nie wiem jak powiedzieć Python po prostu zachować czytania pliku i dodanie do pliku CSV, aż skończy. Innymi słowy, nie ma sposobu, aby wiedzieć dokładnie, ile ogółem linie będą w plikach HTML, a więc nie mogę po prostu csv.SetCell(0,0) to cdv.SetCell(999,999)
korzystanie nikt '.xreadlines' więcej, dla linii' w pliku ' – jamylak
Nie jestem pewien, czy rozumiem, co próbujesz zrobić. Czy próbujesz odczytać plik 'extract.txt', zignorować puste wiersze i umieścić każdą grupę trzech wierszy w jednym wierszu w pliku CSV? – icktoofay
Ach, prawie. Próbuję przeczytać pierwszą z trzech linii i ustawić ją na "tytuł" i drugą z trzech linii i ustawić ją na "intro" i trzecią z trzech linii i ustawić na "tagline", a następnie pominąć białą przestrzeń aż dojdę do następnych trzech linii, a następnie powtórzę to. –