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

Python生成CSV文件代码优化咨询:可运行低效代码如何改进?

代码优化建议

你的代码能正常运行,但可以从内存效率和代码简洁性两方面优化,以下是具体改进方案:

核心优化点

  • 移除无用变量:原代码中的dict1完全未使用,直接删除;commas列表无需提前生成,写入时直接用空格占位即可。
  • 合并循环、减少内存占用:原代码用多个循环分别生成products、device_tags等列表,会把所有数据提前存在内存里。改为单个循环逐行生成数据,或用更高效的批量生成方式,避免不必要的内存消耗。
  • 避免重复定义:原代码重复定义了heads列表,保留一次即可。
  • 简化随机标签生成:用random.choices直接生成指定长度的标签列表,替代循环append。

优化后的代码

import csv
import random

total = int(input("Enter the total number of external products: "))
taglist = ["Critical", "Test", "Prod", "Dev", "EOL", "Internet"]
heads = [
    "rcp_product_alias(*)", "version", "device_name(*)", "ipaddress(*)",
    "device_cutoff_date (yyyy-mm-dd)", "new_version", "schedule",
    "device_tags(semi-colon delimited)"
]

# 批量生成随机标签
device_tags = random.choices(taglist, k=total)

with open('SampleExternalInventroy-MSS.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(heads)
    # 单个循环生成所有行数据,无需提前存储所有列表
    for i in range(total):
        product = f"Mss{i}"
        version = "Version1.1"
        device_name = f"hostname{i}"
        ip = f"100.100.100.{i}"
        # 空字段直接用空格占位
        writer.writerow([product, version, device_name, ip, " ", " ", " ", device_tags[i]])

超大数据量场景优化(十万级以上total值)

如果需要生成的数据量极大,可以用生成器表达式逐行生成数据,完全避免存储所有数据到内存:

import csv
import random

total = int(input("Enter the total number of external products: "))
taglist = ["Critical", "Test", "Prod", "Dev", "EOL", "Internet"]
heads = [
    "rcp_product_alias(*)", "version", "device_name(*)", "ipaddress(*)",
    "device_cutoff_date (yyyy-mm-dd)", "new_version", "schedule",
    "device_tags(semi-colon delimited)"
]

# 生成器表达式,按需生成每行数据
def generate_rows(total, tags):
    for i in range(total):
        yield (
            f"Mss{i}",
            "Version1.1",
            f"hostname{i}",
            f"100.100.100.{i}",
            " ", " ", " ",
            tags[i]
        )

with open('SampleExternalInventroy-MSS.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(heads)
    writer.writerows(generate_rows(total, random.choices(taglist, k=total)))

优化效果说明

  1. 内存占用大幅降低:原代码需要存储5个长度为total的列表,优化后仅需存储1个标签列表(或完全不存储,用生成器)。
  2. 代码更简洁:减少了冗余循环和变量,逻辑更清晰。
  3. 效率提升:避免了多次循环和列表append操作,生成数据的速度更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:07:02