3 回答

TA貢獻1803條經驗 獲得超6個贊
在我看來,最好不要嘗試與模塊aiofiles一起使用csv并運行同步代碼loop.run_in_executor并異步等待它,如下所示:
def write_extract_file(output_filename: str, csv_list: list):
"""
Write the extracted content into the file
"""
try:
with open(output_filename, "w+") as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=columns.keys())
writer.writeheader()
writer.writerows(csv_list)
except FileNotFoundError:
print("Output file not present", output_filename)
print("Current dir: ", os.getcwd())
raise FileNotFoundError
async def main():
loop = asyncio.get_running_loop()
await loop.run_in_executor(None, write_extract_file, 'test.csv', csv_list)

TA貢獻1793條經驗 獲得超6個贊
您可以使用aiocsv。以下是將一行異步寫入 CSV 文件的快速示例:
import asyncio
import aiofiles
from aiocsv import AsyncWriter
async def main():
? ? async with aiofiles.open('your-path.csv', 'w') as f:
? ? ? ? writer = AsyncWriter(f)
? ? ? ? await writer.writerow(['name', 'age'])
? ? ? ? await writer.writerow(['John', 25])
asyncio.run(main())

TA貢獻1831條經驗 獲得超9個贊
你可以使用 aiofiles,你只需要將 dict 轉換為一行 :)
import aiofiles
async def write_extract_file(
output_filename: str, csv_list: list
):
cols = columns.keys()
async with aiofiles.open(output_filename, mode='w+') as f_out:
await f_out.write(','.join(cols)+'\n')
for data in csv_list:
line = []
for c in cols:
line.append(str(data[c]) if c in data else '')
line = ','.join(line) + '\n'
await f_out.write(line)
添加回答
舉報