【发布时间】:2013-04-27 04:54:35
【问题描述】:
我有一系列使用 Beautiful Soup 解析成单个文本文件的 HTML 文件。 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) to cdv.SetCell(999,999)
【问题讨论】:
-
没有人再使用
.xreadlines,for line in file -
我不确定我是否理解您要执行的操作。您是否尝试读取
extracted.txt文件,忽略空行,并将每组三行放入 CSV 文件中的一行中? -
啊,差不多了。我正在尝试阅读三行中的第一行并将其设置为“标题”和三行中的第二行并将其设置为“介绍”和三行中的第三行并将其设置为“标语”然后跳过空白直到我读到接下来的三行,然后再做一次。
-
另外,第一个“标题”和文件顶部之间有空格。
-
我想我需要使用 fileIN = open(sys.argv[1], "r") 和 line = fileIN.readline()。但我不知道如何跳过空格,或者一旦我得到它如何处理文本?