Python 2.7 什么';这是一个简单的模式,用于块解析数据以编写csv?

Python 2.7 什么';这是一个简单的模式,用于块解析数据以编写csv?,python-2.7,parsing,export-to-csv,libreoffice-calc,Python 2.7,Parsing,Export To Csv,Libreoffice Calc,我在一个大型XML文件(约700k行)中保存了几年的数据,我用Beautiful Soup解析了这些数据,然后用CSV.writer()将其写入CSV。只是,现在我在电子表格应用程序(LibreOffice)中预览长文本值时遇到问题 进球。将文本分块,并将每个文本与相关日期配对 输入:XML树中的'date'和'text'元素。日期文本是自解释的,文本元素值约为5-10k个单词 输出元组列表。文本元素由静态单词计数分块每个区块与其原始日期值配对,有效地为最终CSV中的每个日期创建多个记录。例如:

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

进球。将文本分块,并将每个文本与相关日期配对

输入:XML树中的'date''text'元素。日期文本是自解释的,文本元素值约为5-10k个单词

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

[(date1, "text1...."),(date1, "text2...."),(date1,"text3...."), ... (daten,"text1..."),(daten,"text2...")]
(每个日期有多条记录是可以的,因为分析是在单词/标记级别,而不是句子/段落级别——顺序不重要)

通过试验
n
的值,我可以更好地控制我在数据上使用的各种应用程序的行长度。无论采用何种解决方案,很明显,它都会在BeautifulSoup的
findAll()
输出“text”时或之后以及
csv.writer()之前发生

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

为编写csv和维护日期文本关系而分块解析数据的简单而优雅的模式是什么

//我重写了这个问题,以便更明确地命名输入和输出

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

例如(Psuedocode):


我个人喜欢这种布局

你能再多要几列吗?例如text1、text2、text3等。在Python解析之后,我将使用其他人的Java小程序对CSV文件执行更多分析。此分析的输入空间只有两个变量。换句话说,我可以有三行相同的日期,但不能有一个日期有三个不同的文本。所有排序都必须在Python到CSV的步骤中进行。在我编辑之后,@SpencerRathbun的评论可能不清楚。我相信他的建议是将元组编写为
[(date1,text1,text2,text3),(date2,text1……,(daten,text1,text2)]
——这与示例不同。坦白地说,我不太了解Python,因此您的没有注释的伪代码将传达您向我展示的模式。。。(>uxtian)我假设您已经知道如何从soup中分离标记。我只是演示生成器格式,以便将每一部分工作流到下一个函数。除非您提供有关输入和输出的更多详细信息(更好地确定问题的范围),我只能给你一个大致的模式来遵循。这个答案激发了我去寻找更多的信息。我找到的最好的解释是在。
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)