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)))
优化效果说明
- 内存占用大幅降低:原代码需要存储5个长度为
total的列表,优化后仅需存储1个标签列表(或完全不存储,用生成器)。 - 代码更简洁:减少了冗余循环和变量,逻辑更清晰。
- 效率提升:避免了多次循环和列表
append操作,生成数据的速度更快。
内容的提问来源于stack exchange,提问作者Prema J
相关产品推荐
相关产品推荐

