我正在编写一个具有以下功能的CSV文件:
import csv
import os
import aiofiles
async def write_extract_file(output_filename: str, csv_list: list):
"""
Write the extracted content into the file
"""
try:
async with aiofiles.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
但是,由于在writerows
方法上不允许等待,所以没有将行写入CSV文件。
如何解决这一问题?有什么解决办法吗?
谢谢。
整个代码都可以找到这里。
发布于 2020-08-09 19:32:50
在我看来,最好不要尝试将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)
发布于 2021-12-09 10:18:47
您可以使用艾奥切夫。下面是异步将行写入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())
有关更多示例,请参见:https://pypi.org/project/aiocsv/
发布于 2020-08-13 14:07:34
您可以使用aiofiles,您只需将数据转换为一行:)
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)
https://stackoverflow.com/questions/63324327
复制相似问题