首页 > 解决方案 > csv.writer 比 to_csv 快得多吗?

问题描述

我一直在编写一些抓取脚本,尝试各种方式将提取的数据导出到 csv。我发现 csv.writer 比 to_csv 快得多,我实际上是在计时,但速度很快。不幸的是,我使用 csv.writer 的输出不是我想要的。

这是函数 to_csv 的输出:

to_csv 输出

to_csv 输出符合我的预期,但导出 9000 行数据需要几个小时。所以我尝试使用 csv.writer,它比 to_csv 函数更快,但不幸的是,输出不是我所期望的。

这是我的脚本:

def writerows(rows, filename):
    with open(filename,'a',encoding='UTF8',newline='') as toWrite:
        writer = csv.writer(toWrite)
        writer.writerow(header)
        writer.writerows([rows])

start = datetime.datetime.now()
count = 0
allin = []
for html in results:
    count+=1
    soup =bs(html,'html.parser')
    try :
        all = soup.find('td',class_='FootNote').text
    except :
        all = np.nan

    name = pd.read_html(html, match='Name')[0].set_index([0, pd.read_html(html, match='Name')[0].groupby(0).cumcount()])[1].unstack(0)
    comname = pd.read_html(html, match='Company Name')[0].set_index([0, pd.read_html(html, match='Company Name')[0].groupby(0).cumcount()])[1].unstack(0)

    try :
        adm = pd.read_html(html, match='Admission Sponsor', index_col=0)[0].T
    except :
        adm = pd.DataFrame({'Admission Sponsor':np.nan,'Sponsor':np.nan},index=[0])

    df = name.join(comname).join(adm)

    df['remark']= all
    allin.append(df)
    finaldf = pd.concat(allin, ignore_index=True)
    
#     finaldf.to_csv('testing01.csv', index=0) >>>> to_csv function
#     writerows(finaldf, 'testing.csv') >>>> csv.writer function
    print(count,'|', end=' ')
finish = datetime.datetime.now() - start 
print("Time Taken:",finish)

我期待输出与 to_csv 函数的输出相同。我很确定我的脚本由于无法达到与 to_csv 函数相同的结果而缺少某些东西。非常感谢您的指导和解释。

标签: pythoncsvweb-scrapingexport-to-csv

解决方案


推荐阅读