【问题标题】:Load .csv files into dictionary and print keys and values separately将 .csv 文件加载到字典中并分别打印键和值
【发布时间】:2017-12-06 21:08:56
【问题描述】:

我无法弄清楚如何将多个 .csv 文件存储到字典中,然后分别打印键和值。我必须获取 6 个 .csv 文件,它们都包含不同的信息,并将它们加载到字典中,然后编写代码,以便我能够将键与其关联的各种值隔离开来,以便我可以打印 ie。 “动物”吃掉“猎物 1、猎物 2 等”。

我认为我必须分别处理每个文件,因此需要 6 个不同的循环来为每个键/值列表获取正确的输出,但我尝试过的所有操作都给了我一条错误消息。 以下是 csv 文件的示例和预期输出:

file1.csv:

Rabbit,Grass  
Snake,Mouse  
Mouse,Grass  

输出:

Predator and prey:   
"Rabbit eats grass"    
"Snake eats mouse"  
"Mouse eats grass"  

这是我目前对一个文件的代码:

import sys
import csv

inf = open("file1.csv", "r")
reader = csv.reader(inf)

data = {}
for row in reader:
    for i in data.keys():
        print(data[i], "eats", i)

我知道它不对,但我不确定当它是 .csv 文件时如何隔离字典中的键。我是编码新手,所以任何帮助将不胜感激! :) 我正在使用 python3。 谢谢!!

【问题讨论】:

  • 一种快速(但有点慢)的方法是使用csv.DictReader 将您的 CSV 作为字典加载,然后您可以合并它们以产生累积结果。
  • 谢谢!不过,我对 python3 中的格式有点不确定,因为它不适用于我在网上看到的内容。
  • 向我们展示一些来自 2 个 csv 文件的示例数据和预期输出
  • 我已经包含了一个文件的示例,其余文件相同,但捕食者和猎物不同,有些包括多个猎物。

标签: python python-3.x


【解决方案1】:

嗯,您的 CSV 中没有键(标题字段)或任何内容,只有简单的值对,您只想分别打印每行的元素,这非常简单:

import csv

with open("file1.csv", "r") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row[0], "eats", row[1])

应该产生什么:

兔子吃草
蛇吃老鼠
老鼠吃草

更新:如果要将数据存储到字典中,只需将第一个值作为键,将第二个值作为其中一个值,例如:

import collections
import csv

# we'll use defaultdict to save us some trouble initializing for each predator
predators = collections.defaultdict(set)  # our final dict, use set to filter out duplicates

files = ["file1.csv", "file2.csv", "file3.csv"]  # all of your CSV files

for file in files:  # go through each CSV file...
    with open(file, "r") as f:  # open it...
        reader = csv.reader(f)  # make a CSV reader
        for row in reader:  # go through it line by line
            predators[row[0]].add(row[1])  # add it to the predators dict

for predator in predators:
    print(predator, "eats", predators[predator])

【讨论】:

  • 谢谢!但是我想这样做是为了将文件中的所有数据加载到描述猎物关系的字典中。字典中的键是捕食者的名字,字典中的值是食物列表。
  • @DallaxT - 那么只需构建一个字典而不是打印元素,检查更新。
  • 哦,好的,谢谢!!所以我可以使用默认值而不是初始化每个文件字典?
  • @DallaxT - 如果您需要所有 CSV 的所有猎物的累积列表,您可以使用相同的 predators 字典“加载”所有 CSV。我已经更新了示例以反映这一点。
【解决方案2】:

您应该结帐pandas。 非常适合这种事情。

df = pd.read_csv('file1.csv', names=['Predator','Prey'])
df['statement'] = df.Predator + ' eats ' + df.Prey

for s in df.statement:
    print(s)

如果你想要一个 {'predator':'prey'} 的字典,你可以这样做

dic = {pred:prey for pred,prey in df[['Predator','Prey']].values}

【讨论】:

  • 谢谢!我不确定这种格式在 python3 中是否允许,但我收到一条带有 =names[ ] 的错误消息。
猜你喜欢
  • 2019-11-04
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多