创建嵌套列表的Python CSV导入
我试图简单地将.csv导入Python。我已经阅读了很多文件,但就我的一生而言,我不知道如何做到以下几点 CSV格式如下所示创建嵌套列表的Python CSV导入,python,list,dictionary,opencsv,dataformat,python-3.x,python-2.7,Python,List,Dictionary,Opencsv,Dataformat,Python 3.x,Python 2.7,我试图简单地将.csv导入Python。我已经阅读了很多文件,但就我的一生而言,我不知道如何做到以下几点 CSV格式如下所示 NYC,22,55 BOSTON,39,22 我试图生成以下内容:{NYC=[22,55],BOSTON=[39,22]},这样我就可以在循环中为每个变量调用I[0]和I[1] 我试过了 import csv input_file = csv.DictReader(open("C:\Python\Sandbox\longlat.csv")) for row in in
NYC,22,55
BOSTON,39,22
我试图生成以下内容:{NYC=[22,55],BOSTON=[39,22]},这样我就可以在循环中为每个变量调用I[0]和I[1]
我试过了
import csv
input_file = csv.DictReader(open("C:\Python\Sandbox\longlat.csv"))
for row in input_file:
print(row)
它打印了我的变量,但我不知道如何在城市名称中嵌套两个数值并生成我希望得到的列表
感谢您的帮助,很抱歉我的新手问题-使用字典理解:
import csv
with open(r'C:\Python\Sandbox\longlat.csv', mode='r') as csvfile:
csvread = csv.reader(csvfile)
result = {k: [int(c) for c in cs] for k, *cs in csvread}
这在我的机器上工作并产生:
>>> result
{'NYC': [22, 55], 'BOSTON': [39, 22]}
它也适用于任意数量的列
在使用的情况下,可以在序列解包上使用索引和切片:
import csv
with open(r'C:\Python\Sandbox\longlat.csv', mode='r') as csvfile:
csvread = csv.reader(csvfile)
result = {row[0]: [int(c) for c in row[1:]] for row in csvread}
导入csv
将open(r'C:\Python\Sandbox\longlat.csv',mode='r')作为csvfile:
csvread=csv.reader(csvfile)
result={row[0]:[int(c)for c in row[1:]]for row in csvread}
这里有一个提示。尝试熟悉str.split(x)
函数
strVar = "NYC,22,55"
listVar = strVar.split(',') # ["NYC", "22", "55"]
cityVar = listVar[0] # "NYC"
restVar = listVar[1:]; # ["22", "55"]
# If you want to convert `restVar` into integers
restVar = map(int, restVar)
如果您不熟悉python理解,可以使用以下使用for循环的代码:
import csv
with open('C:\Python\Sandbox\longlat.csv', 'r') as f:
reader = csv.reader(f)
result = {}
for row in reader:
result[row[0]] = row[1:]
如果希望数字为字符串,则前面的代码有效,如果希望数字为数字,请使用:
import csv
with open('C:\Python\Sandbox\longlat.csv', 'r') as f:
reader = csv.reader(f)
result = {}
for row in reader:
result[row[0]] = [int(e) for i in row[1:]] # float instead of int is also valid
每行将有3个值。您希望第一个作为键,其余作为值
>>> row
['NYC','22','55']
>>> {row[0]: row[1:]}
{'NYC': ['22', '55']}
您可以创建整个dict:
lookup = {row[0]: row[1:] for row in input_file}
您也可以像这样使用熊猫:
import pandas as pd
df = pd.read_csv(r'C:\Python\Sandbox\longlat.csv')
result = {}
for index, row in df.iterrows():
result[row[0]] = row[1:]
不。。。不要自己对CSV文件执行字符串操作。CSV在引用等方面有一些复杂的规则。我认为答案不值得dv。但通常最好使用工具解析标准。由于这些标准往往比人们想象的更复杂,而且图书馆处理内容的速度可能更快、更通用、错误更少,等等。最佳答案,因为它使用本机库作为OP POST以及正确的上下文管理。@PeterWood实际上只是指此解决方案中的第一块代码。你是对的-我之所以使用此代码,是因为他是新手,可能不知道他所有的选项是什么。此外-我相信iterrows提供了(索引,行)元组而不仅仅是行,因此索引是必要的感谢您的回复,我感谢您的帮助,这解决了我的问题@imiguelvargasf:是的,但我喜欢把它隐式地表达出来,因为大多数人都必须查阅它,这样就不容易理解发生了什么。