我有一系列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
从文本文件中去除HTML的Python代码如下:
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")
我不太清楚的是如何一次只读取文本文件(extracted.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)到cdv.SetCell(999,999)
来完成。
.xreadlines
了,而是使用for line in file
。 - jamylakextracted.txt
文件,忽略空行,并将每个三行组成的组合放到 CSV 文件的一行中吗? - icktoofay