【问题标题】:Python repeating CSV filePython重复CSV文件
【发布时间】:2012-07-14 23:43:30
【问题描述】:

我正在尝试从 CSV 文件加载数字数据,以便分别循环遍历每个股票(文件)的计算数据,并确定计算值是否大于特定数字(在本例中为 731)。但是,我使用的方法似乎使 Python 重复列表以及在数字('500')周围添加引号,例如,使它们成为字符串。不幸的是,我认为最终的“if”语句无法处理这个问题,因此它似乎无法正常运行。我不确定发生了什么以及为什么 Python 需要做什么才能让这段代码正常运行。

    import csv
    stocks = ['JPM','PG','GOOG','KO']
    for stock in stocks:
        Data = open("%sMin.csv" % (stock), 'r')
        stockdata = []
        for row in Data:
           stockdata.extend(map(float, row.strip().split(',')))
           stockdata.append(row.strip().split(',')[0])
        if any(x > 731 for x in stockdata):
            print "%s Minimum" % (stock)

【问题讨论】:

  • 为什么要导入库 csv,而不是用户 csv.reader 类?
  • for stock in stocks: 表示stock 将是一个str,因此它没有.extend() 方法。这不可能是你正在运行的代码
  • 请将我们可以运行并生成您的问题的代码放入我们的系统中。只有这样我们才能解决您的问题。正如上面评论中提到的stock 是字符串,它没有.extend() 方法。
  • 以及您实际运行的代码 - 一些示例数据会很有用。
  • 现在已更正。对此感到抱歉。

标签: python list loops if-statement


【解决方案1】:

目前您正在将每行的所有列添加到列表中,然后再次添加到该列表的末尾,该行的第一列?那么所有列都是重要的,还是只是第一列?

您还在比较之前从文件中加载所有数据,但似乎没有在任何地方使用它,所以我想您可以更早地使用快捷方式...

如果我理解正确,您的代码应该是这样(或修改为仅比较第一列)。

你基本上是在写这个吗?

import csv

STOCKS = ['JPM', 'PG', 'GOOG', 'KO']

for stock in STOCKS:
    with open('{}Min.csv'.format(stock)) as csvin:
        for row in csv.reader(csvin):
            if any(col > 731 for col in map(float, row)):
                print '{} minimum'.format(stock)
                break

【讨论】:

  • 就是这样。非常感谢。至少可以说,我的 Python 需要一些练习。
猜你喜欢
  • 2019-02-23
  • 2013-01-21
  • 2019-02-23
  • 2019-08-06
  • 2019-10-30
  • 2016-07-11
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多