亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Python 中異步編寫 CSV 文件

在 Python 中異步編寫 CSV 文件

拉莫斯之舞 2023-05-09 10:31:46
我正在編寫具有以下功能的 CSV 文件:import csvimport osimport aiofilesasync 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 文件。如何解決這個問題?有什么解決方法嗎?謝謝。完整的代碼可以在這里
查看完整描述

3 回答

?
慕碼人8056858

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)


查看完整回答
反對 回復 2023-05-09
?
搖曳的薔薇

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())


查看完整回答
反對 回復 2023-05-09
?
天涯盡頭無女友

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)


查看完整回答
反對 回復 2023-05-09
  • 3 回答
  • 0 關注
  • 522 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號