当前位置: 首页 > 面试题库 >

使用Python将纯文本文件解析为CSV文件

焦宏硕
2023-03-14
问题内容

我有一系列使用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)


问题答案:

我不确定您使用的是哪个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)


 类似资料:
  • 我完全是一个AWS新手,试图用AWS Textract将多页文件表解析为CSV文件。在本页中,我尝试使用AWS的示例,但是当我们处理多页文件时,中断,因为在这些情况下我们需要异步处理,正如您在这里的文档中看到的那样。正确的调用函数应该是并在运行后使用。 所以,我用这个逻辑修改了他们的例子,而不是使用函数,修改后的代码看起来像这样: 但是当我运行时,我得到以下错误: 这是因为调用的标准方法是将S3文

  • 我必须解析一个csv文件,并将其内容转储到mysql表中。 第一输出 在第二个输出中,我需要自定义标头水平对齐。例如 对于第二个输出,它可以是我选择的任何一组标题。然后,我可以使用load data infile将这两个输出数据加载到mysql表中。正在寻找awk脚本来实现这一点。如果你还需要什么,请告诉我。德克萨斯州。

  • 问题内容: 使用nodejs,我想解析一个包含10000条记录的.csv文件,并对每一行进行一些操作。我尝试使用http://www.adaltas.com/projects/node- csv 。我无法让它在每一行暂停。这只会读取所有10000条记录。我需要执行以下操作: 逐行读取csv 在每条线上执行耗时的操作 转到下一行 有人可以在这里提出其他建议吗? 问题答案: 好像您需要使用一些基于流的

  • 使用nodejs,我想解析一个包含10000条记录的.csv文件,并对每一行执行一些操作。我尝试使用http://www.adaltas.com/projects/node-csv。我不能让它每排都停下来。这只是读取所有的10000个记录。我需要做到以下几点: 逐行读取csv 对每行执行耗时操作 转到下一行

  • 我需要将文本文件转换为csv并按列组织它。但是,文本文件中的数据是按行排列的,长度为715页。下面是文本文件外观的示例: 这是我的数据的一个例子,但实际上每个人的信息要多得多,而且有成千上万的条目。 基本上,每一行都用“----”分隔。但是,行之间的数据是多行的。例如,下一行是姓名和年龄,下一行是薪水,下一行是薪水,下一行是薪水,下一行是薪水,这意味着新条目的开始。 有没有一种方法可以让我绕过这种

  • 问题内容: 我正在做一个Maven项目,该项目使我可以解析网站中的html数据。我可以使用下面的代码来解析它: 到目前为止,我还没有问题。我可以解析html数据。我正在从jsoup中使用select方法,并使用“ div.col- section”检索数据,这意味着我正在使用class为col- section的div元素进行查找。我想在textarea中打印数据。即使网站上的实际数据超过一个段落