我有一个非常大的 csv 文件,其中包含几个 HTML 代码字符串。我正在使用 BeautifulSoup 仅提取标签中的<p>
代码。我的代码似乎适用于几个示例,除非我在完整的 csv 文件上运行它时出现内存错误。csv 文件大约 6 GB。这是我的代码
def import_data():
doc=[]
with open('input_file.csv','rb') as f:
reader=csv.reader(f)
for row in reader:
doc.append((row[0],row[2]))
return doc
def main():
data=import_data()
desc=[]
for i in data:
soup = BeautifulSoup(i[1], 'html')
desc.append([i[0],' '.join(el.string for el in soup.find_all('p', text=True))])
with open("output_file.csv",'a') as the_file:
writer=csv.writer(the_file,dialect='excel')
writer.writerow(desc)
if __name__ == '__main__':
main()
我可以明白为什么我的内存不足了,因为我基本上将 6 GB 文件保存在两个地方(data和desc)。我知道我可以将其中一个保存在内存中,因为我可以毫无问题地导入数据。但是你会建议我如何解决这个问题?我应该尝试用 BeautifulSoup 输出而不是两个结构替换第二列吗?或者我应该做一些事情,在我读取一行的地方逐行读取输入文件,对其执行 BeautifulSoup 转换,然后将其导出(所以我一次只有一行在内存中)。谢谢,