您好,我有大型 CSV 文件 (20GB) ~ 100 kk 行需要处理。 CSV 结构很简单,有 4 列 var1、var2、var3、timestamp(yyyy-MM-dd) - 所有列都是字符串。 所以我应该逐行读取 csv 然后准备请求(将日期转换为日期时间)并将请求发送到服务器。我无法发送批量数据。
import pandas as pd
import string
from datetime import datetime
import aiohttp
import asyncio
url_data = 'http://localhost:8080/test'
template = string.Template(("""<?xml version="1.0" encoding="UTF-8"?>
<request>
<const1>CONST1</const1>
<const2>CONST2</const2>
<var1>${VAR1}</var1>
<timestamp>${DATETIME}</timestamp>
<const3>CONST3</const3>
<var2>${VAR2}</var2>
<var3>${VAR3}</var3>
</request>"""))
async def process():
async with aiohttp.ClientSession() as session:
for chunk in pd.read_csv('test.csv', chunksize=50000):
await asyncio.gather(asyncio.create_task(send(session, chunk)))
async def send(session, chunk):
for index, row in chunk.iterrows():
date = datetime.strptime(row['DATETIME'], '%Y-%m-%d')
row['DATETIME'] = date.strftime("%Y-%m-%dT%H:%M:%SZ")
await session.post(url=url_data, data=template.safe_substitute(row))
if __name__ == '__main__':
asyncio.run(process())
我已经准备了一个Python脚本,我想要一些关于是否可以进一步优化速度的建议
将 CSV 文件拆分为更小的文件,并以比此处更小的批次发送它们