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