Python 要加载到字典中的逗号分隔文件

Python 要加载到字典中的逗号分隔文件,python,dictionary,Python,Dictionary,我有一个逗号分隔的文件,一行看起来像: “ABC234234”,23 我想将其加载到字典中,键是第一部分,即“ABC234234” 我还得遥控双引号 python的方法是什么?我建议(像往常一样)用with语句打开CSV文件(这确保完成后它将被关闭!)——除此之外,@carl的答案通常是好的: import csv d = dict(csv.reader(open("foo.txt", "rb"))) import csv with open('yourfile.csv', 'rb') as

我有一个逗号分隔的文件,一行看起来像:

“ABC234234”,23

我想将其加载到字典中,键是第一部分,即“ABC234234”

我还得遥控双引号

python的方法是什么?

我建议(像往常一样)用
with
语句打开CSV文件(这确保完成后它将被关闭!)——除此之外,@carl的答案通常是好的:

import csv
d = dict(csv.reader(open("foo.txt", "rb")))
import csv

with open('yourfile.csv', 'rb') as f:
    thedict = dict(csv.reader(f))
然后根据需要自由使用ICT

请注意,值(当然也包括键)将是字符串。如果您知道第二列始终有一个整数,并且希望将
int
s作为值,则可以将赋值替换为

    thedict = dict((k, int(v)) for k, v in csv.reader(f))
或者,如果您希望避免代码过于紧凑/密集,请将此最新语句分解为,例如:

    ks_vs = ((k, int(v)) for k, v in csv.reader(f))
    thedict = dict(ks_vs)
当然,如果你愿意,也可以进一步细分

这在Python2.6或更高版本中有效。如果你坚持使用2.5,为了让它工作,添加

from __future__ import with_statement

在模块的顶部--我的其余建议仍然适用;-)

您要求的是Pythonic。如果您希望遵循Python Zen中的一条规则(“错误永远不会以静默方式传递”),并且希望检查数据中是否存在重复的键,或者执行其他错误检查或清理(例如:键不能是空字符串,希望去掉前导/尾随空格),则需要编写更详细的代码

#untested example
import csv
with open('the_file.csv', 'rb') as f:
    reader = csv.reader(f)
    the_dict = {}
    for rownum, row in enumerate(reader, start=1):
        if len(row) != 2:
            error('row length is not 2', rownum, row)
            continue
        k, v = [item.strip() for item in row]
        if not k:
            error('key is empty string', ...); continue
        if k in the_dict:
            error(...); continue
        the_dict[k] = v

我不知道,但这可能是一个很好的开始:这是一个CSV文件,还是一个看起来像你描述的手工制作的文件格式?对于外观稍有不同的线条,这必须有多坚固?键可以包含逗号吗?每行只有1个逗号。始终打开文件以与
csv.reader
一起使用
mode='rb'
(Python 2.x)或
newline='
(Python 3.x),我以前使用
for
循环来执行此操作。从不知道迪克特能做到这一点。(但我在2个月前才开始学习Python:P)如果显式关闭文件,这个答案会更好。要将
的功能与
匹配,您应该使用
try/finally
来确保文件关闭,即使
csv.reader出现异常。例如,我还必须去掉双引号。哦,我得到的文件实际上是用urllib2从网上下载的,所以它不在磁盘上。@Blankman,(1):cvs的一部分工作是从引号中的字段周围删除引号——你在抱怨之前试过吗?-)(2):
urllib2.urlopen
的结果是一个类似文件的对象,它非常适合作为参数传递给
csv.reader
,就像
open
(实际的文件对象)的结果一样,更直接,可以在插入dic时进行修改(更可读)。