如何将csv读入值为列表的字典中-然后将其用于不同的csv文件



我正试图将csv文件读取到字典中,其中对于每一行,csv文件的第一列将是字典键,其余列将是列表中的值(忽略标题行)。

我有一个解决方案,但我已经硬编码的列,我想要的是任何数量的列(因为我有多个csv文件的不同数量的列,我想要使用它)。

我在其中一个csv文件中的数据是:

name,test1,test2,test3
dave,66,74,62
rob,59,65,60
nic,71,68,73

这是我使用的代码

import sys
import csv
# Create a dict (where the values are a list) to store the data in memory
database = {}
# Open the csv file and read the contents into memory
filename = sys.argv[1]
with open(filename, "r") as file:
reader = csv.reader(file)
# Ignore the header
next(reader)
for row in reader:
# Read the first column of the csv (name) as the key, then read the remaining columns as a list for the values
database[row[0]] = [int(row[1]), int(row[2]), int(row[3])]
print(database)
打印(数据库)的输出是
{'dave': [66, 74, 62], 'rob': [59, 65, 60], 'nic': [71, 68, 73]}

我遇到的问题是,当我需要在另一个csv文件中读取更多列时,这段代码只适用于4列(除非我扩展它)行[4],行[5]等…

是否有一种方法,我可以重写代码,只是在行[1]读取一路通过行[n]在csv文件?其中n为csv文件中最后一列的编号。

非常感谢任何帮助。刚开始学习Python,我一直在寻找,但我没能找到任何帮助。提前谢谢。

您考虑过pandas吗?

filename = sys.argv[1]
df = pd.read_csv(filename)
dct = dict(zip(df['name'], df.drop('name', axis=1).apply(list, axis=1)))

以您显示的数据为例:

>>> dct
{'dave': [66, 74, 62], 'rob': [59, 65, 60], 'nic': [71, 68, 73]}

如果你想使用csv和循环,你也可以这样做(我猜会更慢):

with open(filename) as file:
reader = csv.reader(file)
# Ignore the header
next(reader)
database = {row[0]: [int(x) for x in row[1:]] for row in reader}

您需要在csv文件中分隔key和value,例如:

键值1,value2等,之后你可以使用拆分函数split(" - ")

with open(" samepath.csv ") as f:对于f中的行:(关键,val) = line.split("-")dict int[主要]= (val)

或者直接使用列表推导式

import sys
import csv
# Create a dict (where the values are a list) to store the data in memory
database = {}
# Open the csv file and read the contents into memory
filename = sys.argv[1]
with open(filename, "r") as file:
reader = csv.reader(file)
# Ignore the header
next(reader)
for row in reader:
# Read the first column of the csv (name) as the key, then read the remaining columns as a list for the values
database[row[0]] = [int(row[x]) for x in range (1, len (row))]
print(database)

您也可以在不使用csv模块的情况下实现。

import sys
database = {}
with open(sys.argv[1], "r") as file:
next(file)
for line in file:
vals = line.strip().split(",")
database[vals[0]] = [int(val) for val in vals[1:]]

相关内容

  • 没有找到相关文章