我有一个文本文件
application/andrew-inset ez
application/applixware aw
application/atom+xml atom
application/atomcat+xml atomcat
application/atomsvc+xml atomsvc
application/ccxml+xml ccxml
application/cdmi-capability cdmia
application/cdmi-container cdmic
image/jpeg jpeg jpg jpe我想转换成python的键值对字典。我怎么能做到这一点。
在多个值的情况下,我也很困惑,我该怎么办?
我想从mimetype中获取文件扩展名
所以基本上,在多个值的情况下,我想得到第一个值。
e,g
mydict['image/jpeg']应返回jpeg
这就是我所说的
import shlex
f = open("mimetypes.txt","r")
mydict = dict()
for line in f:
k,v = shlex.split(line.strip())
mydict[k.strip()] = v.strip()
f.close()
f2 = open("mimetest.txt","w")
f2.write(mydict)
f2.close()我得到了这个
Traceback (most recent call last):
File "makedict.py", line 5, in <module>
k,v = shlex.split(line.strip())
ValueError: too many values to unpack发布于 2012-12-31 11:31:18
编辑:根据您的更新,您非常接近-问题是因为这一行:
k,v = shlex.split(line.strip())正如您所知道的,它适用于具有两个项的任何元素,但当您有多个项时,问题就来了。例如:
In [1]: import shlex
In [2]: line = 'one two'
In [3]: k,v = shlex.split(line.strip())
In [4]: print k, v
one two
In [5]: line = 'one two three'
In [6]: k,v = shlex.split(line.strip())
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/<ipython console> in <module>()
ValueError: too many values to unpack发生的情况是,您正在尝试使用包含三个项目的列表为两个变量赋值,这将给您带来错误。您可以在代码中做的一件事是通过执行以下操作将返回的列表限制为只返回两个项:
In [7]: line = 'one two three'
In [8]: k,v = shlex.split(line.strip())[:2]
In [9]: print k, v
one two一般的想法是创建一个字典,打开文件,然后在每一行上,去掉尾随的换行符,拆分空格,并获取结果列表的前两个元素:
In [5]: d = {}
In [6]: with open('mime.txt', 'rb') as f:
...: for line in f:
...: mime, val = line.strip().split()[:2]
...: d[mime] = val
...:
...:
In [7]: d
Out[7]:
{'application/andrew-inset': 'ez',
'application/applixware': 'aw',
'application/atom+xml': 'atom',
'application/atomcat+xml': 'atomcat',
'application/atomsvc+xml': 'atomsvc',
'application/ccxml+xml': 'ccxml',
'application/cdmi-capability': 'cdmia',
'application/cdmi-container': 'cdmic',
'image/jpeg': 'jpeg'}
In [8]: d['image/jpeg']
Out[8]: 'jpeg'如果你需要存储所有的项目,你可以这样做:
In [1]: d = {}
In [2]: with open('mime.txt', 'rb') as f:
...: for line in f:
...: line = line.strip().split()
...: d[line[0]] = line[1:]
...:
...:
In [3]: d
Out[3]:
{'application/andrew-inset': ['ez'],
'application/applixware': ['aw'],
'application/atom+xml': ['atom'],
'application/atomcat+xml': ['atomcat'],
'application/atomsvc+xml': ['atomsvc'],
'application/ccxml+xml': ['ccxml'],
'application/cdmi-capability': ['cdmia'],
'application/cdmi-container': ['cdmic'],
'image/jpeg': ['jpeg', 'jpg', 'jpe']}这包括所有的MIME类型,所以如果你只想要第一个类型,你可以调用给定类型的值的第一个元素:
In [4]: d['image/jpeg'][0]
Out[4]: 'jpeg发布于 2012-12-31 11:44:48
另一种方法是:
dic = {}
file = open("filename","r")
contents = file.readlines()
for content in contents:
value = filter(lambda a: a !='',content.split(" "))
dic[value[0]] = value[1]
file.close()
print dic['image/jpeg']我们用“”拆分每一行,然后删除列表中的任何“”。然后,我们将为字典赋值。
https://stackoverflow.com/questions/14097091
复制相似问题