因此,我昨天问了这个问题,但我想我可以说得更好。我有一个包含4列的csv文件,其中1列包含购票的日期(周三,周四和周五),另一列包含每个客户购买了多少票。周三和周四的票价与周五的票价不同。我需要获取代码以遍历“购票”列,并仅从“购买日期”列中包含“ W”或“ T”的行中获取数据,以便我可以计算周三和周四的销售收入,然后星期五的销售也一样我希望我已经解释清楚了。如果有帮助,到目前为止这是我的代码:
wedThur = int(5.00)
friday = int(10.00)
def readFile():
ticketid = []
ticketsBought = []
method = []
f = open("ticketdata.csv")
csvFile = csv.reader(f)
for row in csvFile:
ticketid.append(row[1])
ticketsBought.append(int(row[2]))
method.append(row[3])
f.close()
return ticketid, ticketsBought, method
def calculatePurchases(ticketid, ticketsBought):
price = 0
amount = len(ticketid)
if 'W' or 'T' in ticketid:
price = wedThur * amount
print(price)
else:
price = friday * amount
print(price)
return price
答案 0 :(得分:1)
Python具有许多惊人的功能来处理此类数据。 首先,我将更改您的读取文件功能以返回更合适的数据结构。我将返回元组列表,而不是返回列表元组。
def read_file():
data = []
f = open("ticketdata.csv")
csvFile = csv.reader(f)
for row in csvFile:
data.append(row)
f.close()
return data
Python具有内置函数sum
,该函数对序列中的所有元素求和。
sum([1, 2, 3])
返回6。
一切都需要为它编写正确的顺序。
def iterate_by_day(days, data):
for d in data:
if d[0] in days:
yield d[1]
这将创建一个称为生成器的特殊对象。访问python tutorial,并使自己熟悉它。
这应该打印出预期的结果。
data = read_file()
wed_thur = 5
print(sum(iterate_by_day("WT", data) * wed_thur))
# This works the same
print(sum(iterate_by_day(["W", "T"], data)) * wed_thur)