You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python异步生成VIN写入CSV时拆分存储问题求助

问题解决:VIN写入CSV被拆分的问题

问题根源

你代码里的核心问题是:asyncio.gather()返回的是包含各协程结果的列表,而你用for VIN in VIN:循环把列表里的每个元素单独写入了一行CSV,导致完整VIN被拆成多段存储。

另外还有两个次要问题:

  • if __name__ == "__main__":放在循环内部会重复创建事件循环,不符合规范
  • 末尾的VIN校验逻辑用的是循环最后一次的单个片段,不是完整VIN,校验结果无意义

修正后的代码

import random
import string
import asyncio
import csv


async def get_random_string(length):
    letters = string.ascii_uppercase
    result_str = ''.join(random.choice(letters) for i in range(length))
    return result_str


async def my_function1():
    return str(random.randint(0, 9))


async def my_function2():
    return str(random.randint(100, 999))


async def my_function3():
    return str(random.randint(100000, 999999))


if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    with open('VIN.csv', 'w', newline='') as csvfile:  # 添加newline=''避免CSV出现空行
        fieldnames = ['VIN']
        thewriter = csv.DictWriter(csvfile, fieldnames=fieldnames)
        thewriter.writeheader()
        
        for _ in range(100):
            # 收集所有协程结果,得到片段列表
            vin_parts = loop.run_until_complete(asyncio.gather(
                my_function1(), 
                get_random_string(3),
                my_function2(), 
                get_random_string(4), 
                my_function3()
            ))
            # 拼接成完整VIN字符串
            full_vin = "".join(vin_parts)
            print(full_vin)
            # 写入完整VIN到一行
            thewriter.writerow({"VIN": full_vin})
            
            # 对当前完整VIN做校验
            has_uppercase = any(ele.isupper() for ele in full_vin)
            print(f"Does String contain uppercase character : {has_uppercase}")
            
            is_correct_length = len(full_vin) == 17
            print(f"VIN length = 17 : {is_correct_length}")

关键修改点

  • 把if __name__ == "__main__":移到最外层,只创建一次事件循环
  • 将原VIN变量改名为vin_parts,明确是VIN的片段列表,避免变量名混淆
  • 用"".join(vin_parts)生成完整VIN字符串,再写入CSV一行,而非循环写入每个片段
  • 添加newline=''到open()中,避免Windows系统下CSV出现多余空行
  • 把校验逻辑移到循环内部,针对每次生成的完整VIN进行校验,确保结果有效

内容的提问来源于stack exchange,提问作者kaycia_g

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:45:38