python - 循环以一次添加一行到列表
问题描述
我有下面的代码来创建 ItemID 的列表和其他从 csv 创建其他列表的功能。我尝试编写一个函数来循环并一次添加一行到其他列表(为每个 ItemID 添加一个新的价格行),而不是每个循环都创建完整列表。
def Main(filename1, filename2):
with open(filename1, "r") as csv1, open(filename2, "r") as csv2:
csvReader1 = csv.DictReader(csv1)
csvReader2 = csv.DictReader(csv2)
ItemIDList = []
for row1, row2 in zip(csvReader1, csvReader2):
ItemIDList.append((row2["ItemId"]))
return ItemIDList
def buildObject(ItemIDList):
for row in ItemIDList: getPrice(filename1, filename2)
for row in ItemIDList: NameList = getName(filename1, filename2)
def getPrice(filename1, filename2):
with open(filename1, "r") as csv1, open(filename2, "r") as csv2:
csvReader1 = csv.DictReader(csv1)
csvReader2 = csv.DictReader(csv2)
priceList = []
for row1, row2 in zip(csvReader1, csvReader2):
csvPVList.append((row2["Price"]))
return priceList
主要构建 ID 列表,getPrice 是我试图重写的函数,以便在 buildObject 中的每个循环一次只从 csv 中添加一行。
解决方案
这是一个设计问题。从磁盘读取文件是一项昂贵的操作,应该只执行一次。并且将两个 csv 文件加载到内存中以压缩它们的内存效率不高。所以你应该:
- 有一个提取器方法/函数,一次读取两个文件,并提供列表(或元组/命名元组/对象的列表)以及接下来将使用的所有数据
- 让这个提取器返回这些列表
如果使用单独的列表,代码可以是(高度简化,无错误处理):
def extract_data(filename1, filename2):
with open(filename1, "r") as csv1, open(filename2, "r") as csv2:
csvReader1 = csv.DictReader(csv1)
csvReader2 = csv.DictReader(csv2)
ItemIDList = []
priceList = []
for row1 in csvReader1:
row2 = next(csvReader2)
ItemIDList.append(row2["ItemId"])
priceList.append(row2["Price"])
... # eventually extract other fields
return ItemIDList, priceList
或者如果使用命名元组:
from collections import namedtuple
Record = namedtuple("ItemId", "Price")
...
recordList = []
for row1 in csvReader1:
row2 = next(csvReader2)
recordList.append(Record(row2["ItemId"],row2["Price"]))
return recordList
推荐阅读
- r - 是否有像 ggplot 或 plot 之类的 R 函数以按 id 和不同颜色在同一图中显示我所有的时间序列曲线
- c# - 获取 XML 正文 - 调用肥皂网络服务时出现反序列化错误
- apache-spark - 使用 Spark 从 S3 复制到 HDFS
- c++ - C++ Win32 通知菜单更改
- kubernetes - 当提到 istio 或 kubernetes 时,“本地”是什么意思?
- node.js - nodejs中的Winston内存泄漏问题
- windows - React Native 应用程序是否能够在 Windows 服务器上运行?
- arrays - Excel 数组填充了 listobject 列范围的非空白值
- sql-server - DBCC 命令是存储过程还是函数?
- 3d - 在 python 中从 2D 图像的 z 堆栈制作 3D 模型