【问题标题】:Taking items from a CSV file and putting the elements in a list从 CSV 文件中获取项目并将元素放入列表中
【发布时间】:2012-11-18 01:15:54
【问题描述】:

我在这里有一个 CSV 文件:http://www.filedropper.com/excel,看起来像这样http://pastebin.com/ammzv4FK

我想做的是这样的:

取每一年及其对应的行,找出以月为单位的数字并将它们加起来并将它们分配给变量。

所以第一年,即 2000 年,列表将如下所示:

year2000 = ['14744', '2947', '14905', '1748',  '2859',  '11778', '1453',  '5255', '14806', '1858', '10763', '6000']

然后,一旦我有了那个列表,我就可以将列表中的元素从字符串转换为整数,并使用 sum() 命令对它们进行求和。

我可以打印出这些行,但我无法排除年份编号,然后将其余部分存储到变量中,因为我的列表是这样的:

['2000, 14744, 2947, 14905, 1748,  2859,  11778, 1453,  5255, 14806, 1858, 10763, 6000']

作为一个大字符串,而不是单个元素,我的列表一次打印出所有年份,所以我似乎无法弄清楚如何将它们存储到变量中并分别合计。

这是我的代码:

with open("file.csv","r") as f:
    for i in range(1): 
        next(f)
    for x in f:
        x=x.split()
        print (x)

但是当print(x) 运行时,它会全部打印出来,我怎样才能将每一年及其内容存储在一个变量中,同时排除实际的年份数字?

我正在使用 Python 3,谢谢。

【问题讨论】:

  • csv 模块就是你想要的。此外,您应该在问题中显示您当前的代码。
  • @syhpoon 是的,如果我能够将它们放入自己的变量中。

标签: python list csv


【解决方案1】:

如果你得到这样的行,你可能没有使用 csv 阅读器。您应该使用csv 模块并将每一行存储在dict 中,并以年份为键。这仅在您的数据包含整数时才有效。

data = {}

with open("data.csv") as f:
    reader = csv.reader(f, delimiter="\t")
    reader.next() # Skip header
    for row in reader:
        row = list(map(int, row))
        data[row[0]] = row[1:]

要获得总和,请使用内置的sum 函数。

【讨论】:

  • 我使用的是 CSV 模块,但是对于您的代码,我收到错误 'map' object is not subscriptable。
  • 在 python 3.x 中,您可能会认为key, *values = list(map(int, row)) 是一种更好的拆分列表的方式。
  • 现在我收到此错误:int() 的无效文字,基数为 10:'2011,3814,2343,6367,13244,3993,9770,5662,2278,12642,12347,14991, 1910 年,'
  • 您的 csv 逗号分隔还是制表符分隔?您链接的那个是制表符分隔的。逗号是从哪里来的?
  • 哦,我的原始文件可能有所不同,我必须发布一个较短的版本,但我认为我将其设为 CSV。我的原件是逗号分隔的。
猜你喜欢
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
相关资源
最近更新 更多