編輯:根據您的更新,你很親密Ë - 這個問題是因爲該行的:
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
這很簡單。你有什麼嘗試? –
更新的問題 – user19140477031