我在一个大型XML文件(~700k行)中有几年的数据,我用Beautiful Soup解析过,然后用csv.writer()
写入CSV。只是,现在我在电子表格应用程序(LibreOffice)中预览长文本值时遇到了问题。
目标。对文本进行分块并将其与每个文本的相关日期配对。
输入: ' date' 和' text' 元素来自XML树。日期文本不言自明,文本元素值约为 5-10k字。
输出。 元组列表。 text元素由静态字数分块。 每个块与其原始日期值配对,有效地为最终CSV中的每个日期创建多个记录。例如:
[(date1, "text1...."),(date1, "text2...."),(date1,"text3...."), ... (daten,"text1..."),(daten,"text2...")]
(每个日期的多个记录都可以,因为分析是在单词/标记级别,而不是句子/段落级别 - 顺序并不重要)
尝试使用n
的值,我可以更好地控制我在数据上使用的各种应用程序的行长度。无论解决方案是什么,显然它都会在BeautifulSoup的findAll()
输出之后或之后发生#text;'在csv.writer()
之前 - 自然而然。
目前,将日期列表和文本列表及zip()
组合在一起非常简单,因为它们都是相同大小的列表。此设计创建了两个不同大小的列表,因此我需要在分块步骤中插入date
。
用于编写csv和维护日期 - 文本关系的块解析数据的简单和优雅模式是什么?
//我已经重写了这个问题,以更明确地命名输入&输出。
答案 0 :(得分:1)
我建议python's generators。这允许您创建可以链接在一起的操作“管道”。每个步骤都可以做一件事,您可以根据需要添加其他步骤。
例如(Psuedocode):
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)
我个人喜欢这个布局。