【问题标题】:Storing specific values in a list by reading a file通过读取文件将特定值存储在列表中
【发布时间】:2016-02-23 15:09:11
【问题描述】:

我有一个格式如下的文件:

name | age | gender
abc  |  4  |  M
xyz  |  5  |  F
pqr  |  6  |  M
stu  |  5  |  F

这是一个 CSV 文件,因此姓名、年龄和性别是单独的行。

我正在尝试将年龄值存储在列表中并计算相似年龄的出现次数。

类似:

age_list = [4,5,6,5] 

以及每个元素的出现。 我想我知道如何做发生的部分,我不能做的是将年龄的值存储在一个列表中。

为了便于理解,我只发布了文件的一小部分。该文件实际上包含大量数据。

我只到了以读取模式打开文件并执行以下操作的地步:

data = [line.strip() for line in file.readlines()]

我尝试搜索类似的查询,但找不到。我是这个网站的新手,所以我不太了解规则或指南。

【问题讨论】:

  • 如果是CSV文件,你应该使用csv模块。
  • 如你所问,请阅读 stackoverflow.com/help/how-to-ask 以获取有关如何提问的提示(并不是说这很糟糕)

标签: python list csv


【解决方案1】:

如果你有一个 CSV 格式的文件并且你想使用csv 库:

import csv
from collections import Counter

with open('csvfile.csv', 'r') as csvfile:
    data = csv.reader(csvfile, delimiter=',')
    next(data, None) # Ignore headers
    results = Counter([x[1] for x in data])
    print results

如果您不想导入 csv 并且您在字符串变量中有数据,这可能会有所帮助:

from collections import Counter

data = """name | age | gender
abc  |  4  |  M
xyz  |  5  |  F
pqr  |  6  |  M
stu  |  5  |  F"""

cleaned_data = Counter([x.split('|')[1].strip() for x in data.split('\n')[1:]])
print cleaned_data

两个示例的输出相同:

{
    '5': 2,
    '4': 1,
    '6': 1
}

【讨论】:

  • 这里为什么需要Counter
  • @KevinGuan And the occurrence of each element,阅读。
  • 1. OP 表示他们确实已经导入了csv。 2. data 根本不代表 CSV 文件。 CSV 文件的值通常用逗号分隔。
【解决方案2】:

您可以使用 csv 阅读器或其他库,例如 panda 和 numpy,但如果您只想使用 python,这就是方法!无需导入任何额外的东西

In [24]: ages = []
In [25]: with open("data.csv","r") as f:
   ....:     ages+=f.read().splitlines()
   ....:
In [26]: ages
Out[26]: ['name,age,gender', 'abc,4,M', 'xyz,5,F', 'pqr,6,M', 'stu,5,F']
In [27]: ages=[s.split(",")[1] for s in ages][1:] #all second cols(ages),except the first row
In [28]: ages
Out[28]: ['4', '5', '6', '5']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    相关资源
    最近更新 更多