【问题标题】:Loading data from a csv file and display in list of tuples从 csv 文件加载数据并显示在元组列表中
【发布时间】:2015-11-12 17:03:42
【问题描述】:

有没有人知道如何编写一个函数loading_values(csvfilename),它接受一个与数据文件名称相对应的字符串,并返回一个包含子集名称(作为字符串)的元组列表和一个浮点列表数据值。 调用函数时的结果应该是这样的

>>> stat = loading_values(`statistics.csv`)
>>> stat
     [('Pressure', [31.52, 20.3, ..., 27.90, 59.58]),
      ('Temp', [97.81, 57.99, ..., 57.80, 64.64]),
      ('Range', [79.10, 42.83, ..., 68.84, 26.88])]

现在我的代码为每个没有用 (,) 连接的子标题返回单独的元组

f=open('statistics.csv', 'r')
for c in f:
    numbers = c.split(',')
    numbers = (numbers[0], (numbers[1::]))

[('Pressure', [31.52, 20.3, ..., 27.90, 59.58])
 ('Temp', [97.81, 57.99, ..., 57.80, 64.64])
 ('Range', [79.10, 42.83, ..., 68.84, 26.88])]

【问题讨论】:

  • 您是否尝试过查看csv 模块?
  • 我有,但是因为我必须执行许多统计函数(如平均值、计数、最大值、最小值等),如果没有 csv 模块会更容易,或者至少我就是这样被告知
  • 除非你愿意,否则不要重新发明轮子(即使那样也只是作为练习)
  • @kattoch 您希望输出如何?
  • 它应该在第一个代码块中显示为 stat

标签: python list function csv tuples


【解决方案1】:

试试:

def loading_values(csvfile):
    f=open(csvfile, 'r')
    results = []
    for line in f:
        numbers = list(map(lambda x: x.strip(), line.split(',')))
        results.append((numbers[0], numbers[1:]))

    return results

print loading_values(`statistics.csv`)

或者你可以使用csv module:

import csv
with open('statistics.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    results = map( lambda x: (x[0],x[1:]), reader)

【讨论】:

  • 不太熟悉使用 map(lambda x: ),但是当我运行它时我得到了这个
  • 您使用的是 python 3?打印list(results)
  • 是的,我使用的是 3.4,是的,它工作得很好,非常感谢你的帮助,现在我只需要研究 map(lambda... 以了解它是如何工作的
  • 很好,检查一下Lambda, filter, reduce and map
  • 抱歉,只是对此进行了跟进,当我从 csv 文件加载实际数据时,每个子集的末尾都有空格,在我的旧代码中,我使用了 c.strip() 但它是现在不能使用新代码,有什么建议吗?
猜你喜欢
  • 2018-04-20
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 2018-09-25
相关资源
最近更新 更多