网页爬取到的数据,或经过批量转换、清洗后的数据,需要写入并保存为csv格式的文件。如果生成大量的、全部的数据后才一次性写入和保存,程序运行过程一遇到中断或中间报错,已处理过的数据尚未保存到csv文件中,只能从新开始,浪费时间。
采用一开始生成一个空的csv文件,再逐条数据,逐行写入的方式,即使中间报错中断,已处理的数据也已保存下来了,避免重头再次处理数据。
思路:
一开始先创建一个空的csv文件,表头信息同时写入。如果csv文件已存在,覆盖原文件。

import os
import numpy as np
import sys
import csv

path2="D:\PDF报告输出" #定义PDF数据存放的文件夹
tempfilename = "PDF报告"
X = '解析结果'           
def create_csv(X,csv_head):
    path = str(path2+"\\"+tempfilename+"(%s).csv" % (X))#同目录下的新文件名                        
    with open(path,'w',newline = '',encoding='utf-8_sig') as f:
        csv_write = csv.writer(f)        
        csv_write.writerow(csv_head)#写入表头
    
csv_head = ["企业名称","数据日期","交易日期","数量",'标签名称1','标签1解释','标签名称2','标签2解释','标签名称3','标签3解释']#表头信息
create_csv(X,csv_head)

每解析一个PDF文件,生成一行数据,逐条写入csv文件并自动保存。

import pdfplumber

name_list=os.listdir(path1) #用os库获取该文件夹下的PDF文件名称
def write_csv(X,data_row):
    path = str(path2+"\\"+tempfilename+"(%s).csv" % (X))#                        
    with open(path,mode='a',newline = '',encoding='utf-8_sig') as f:
        csv_write = csv.writer(f)        
        csv_write.writerow(data_row)
N = 1
for name_list in name_list :
    data_row = []#创建一个空的列表,将处理后的数据放进来,最后保存为csv的一行
    pdf = pdfplumber.open(path1+"\%s" % (name_list))# 导入pdf
    page = pdf.pages[3]# pdf文档第四页,逐页解析的
    content = page.extract_text()
    content3 = content.replace('\n','')#第三页剔除掉回车键
    col1 = re.findall('(?<=目标公司:).*',content)  # 目标公司
    #print(col1)
    data_row.append(col1[0])#输出查询的公司名称为第1列
    i = 1 # Excel起始位置(i=1不包括表头字段名)    
    for i in range(1,Num+1):
        YY2 = ''
        YY3 = ''
        if i == 1:
            #print(table1[i])
            YY1 = table1[i][0] #第一个标签名称            
            #print(YY1)
            data_row.append(table1[i][0])#输出为第2列
            data_row.append(table1[i][1].replace('\n',''))#输出 为第3列          
        elif i == 2:
            #print(table1[i])
            YY2 = table1[i][0]  #第二个标签名称
            #print(YY2)    
            data_row.append(table1[i][0])#输出为第4列
            data_row.append(table1[i][1].replace('\n',''))#输出为第5列
       
    write_csv(X,data_row)#生成的列表写入csv表格,生成一行数据
    print("已经解析第%s个PDF文档" % (N))
    print("*" *20)
    N = N+1

运行过程如果报错,创建的csv文件中已保存了前面处理的数据,必须另存文件后再接着处理后面的数据。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐