【问题标题】:What's a simple pattern to chunk parse data for writing csv?什么是块解析数据以编写 csv 的简单模式?
【发布时间】:2015-03-29 06:47:23
【问题描述】:

我在一个大型 XML 文件(约 70 万行)中保存了数年的数据,我使用 Beautiful Soup 对其进行了解析,然后使用 csv.writer() 将其写入 CSV。只是,现在我在我的电子表格应用程序 (LibreOffice) 中预览长文本值时遇到问题。

目标。将文本分块并将每个文本与其相关日期配对。

输入: 'date''text' elements 来自 XML 树。日期文本不言自明,文本元素值约为 5-10k 字

输出元组列表。文本元素按静态字数分块。 每个块与其原始日期值配对,有效地为最终 CSV 中的每个日期创建多条记录。例如:

[(date1, "text1...."),(date1, "text2...."),(date1,"text3...."), ... (daten,"text1..."),(daten,"text2...")]

(每个日期的多条记录都可以,因为分析是在单词/标记级别,而不是句子/段落级别--顺序无关紧要)

使用n 的值进行实验,我可以更好地控制我在数据上使用的各种应用程序的行长。无论解决方案如何,很明显它会在 BeautifulSoup 的 findAll() 输出“文本”时或之后发生,而在 csv.writer() 之前自然会发生。

目前,制作日期列表和文本列表以及zip() 将它们放在一起非常简单,因为它们都是相同大小的列表。这种设计创建了两个不同大小的列表,所以我需要在分块步骤中插入date

什么是简单的优雅模式来分块解析数据以编写csv并维护日期-文本关系?

//我已经重写了问题以更明确地命名输入和输出。

【问题讨论】:

  • 你能再多一些列吗? IE。 text1、text2、text3 等
  • 我将使用别人的Java小程序对Python解析后的CSV文件进行更多分析。该分析的输入空间只是两个变量。换句话说,我可以有三个具有相同日期的行,但不能有一个具有三个不同文本的日期。所有的排序都必须在 Python 到 CSV 步骤中进行。
  • 经过我的编辑,@SpencerRathbun 的评论可能不清楚。我相信他的建议是将元组写为[(date1, text1, text2, text3),(date2, text1...),...(daten, text1,text2)]--这与示例不同。

标签: python-2.7 parsing export-to-csv libreoffice-calc


【解决方案1】:

我建议python's generators。这允许您创建可以链接在一起的操作“管道”。每个步骤可以做一件事,您可以根据需要添加其他步骤。

例如(伪代码):

def getTags():
tags = Beautifulsoup.find_all()
for tag in tags:
    yeild (date, tag)

def splitText(input):
    for (date, text) in input:
        for t in text.split("."):
            yield (date, t)

def writeLines(input):
    for line in input:
        csv.write(line)

tags = getTags()
lines = getLines(tags)
writeLines(lines)

我个人喜欢这种布局。

【讨论】:

  • 坦率地说,我不太了解 Python,以至于您的没有注释的伪代码会传达您向我展示的模式... (>_在同一个文件中有不同的日期和文本,我必须为文本添加另一个生成器......然后加入它们?跨度>
  • @xtian 我以为你已经知道如何从汤中分离标签了。我只是在演示生成器格式,以将每个工作段流式传输到下一个函数。除非您向我提供有关您的输入和输出的更多详细信息(更好地确定您的问题范围),否则我只能为您提供一个可以遵循的一般模式。
  • 这个答案促使我去寻找更多信息。我找到的最佳解释是anandology.com/python-practice-book/iterators.html
猜你喜欢
  • 2014-05-17
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 2017-09-21
相关资源
最近更新 更多