根据来自另一列的数据计算csv文件中一列的值

时间:2019-02-27 09:46:15

标签: python-3.x csv

因此,我昨天问了这个问题,但我想我可以说得更好。我有一个包含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

1 个答案:

答案 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)