如何在python中拆分文本文件
我有这个文本文件如何在python中拆分文本文件,python,centos,urllib2,Python,Centos,Urllib2,我有这个文本文件 application/andrew-inset ez application/applixware aw application/atom+xml atom application/atomcat+xml atomcat application/atomsvc+xml
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格式。
我该怎么做呢
我也很困惑,如果有多个值,我应该怎么做
我想从mimetypes中获取文件扩展名
基本上,如果是多个值,我想得到第一个
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
回溯(最近一次呼叫最后一次):
文件“makedict.py”,第5行,在
k、 v=shlex.split(line.strip())
ValueError:要解压缩的值太多
编辑:根据您的更新,您非常接近-问题在于这一行:
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 [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
另一种方式是:
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']
我们将按“”拆分每一行,然后删除列表中的任何“”。然后我们给字典赋值。这很简单。你试过什么?很明显,OP自己都没有试过这么做,你不应该只是给出这样的答案。@HunterMcMillen我在这方面看到了不同的意见,我通常倾向于提供我能提供的任何方向,并希望OP能从中得到一些有用的东西。我知道的远比这个网站上的大多数人少,所以我肯定知道被困在某个地方而不知道去哪里是什么感觉。这对一些人来说可能很简单,但对刚刚学习的人来说可能会有点困难。我已经尝试了一些东西,我会在上面发帖子看看我在哪里wrong@RocketDonkey我完全理解你来自哪里,只是我在过去看到,仅仅分发答案会让人们更加依赖这样的网站,我想这并不是件坏事。但自力更生是程序员/开发人员/任何人真正被忽视的属性;你自己弄清楚会让你以后更不可能犯同样的错误。@RocketDonkey,但我现在看到他们确实在尝试,所以我的评论是空的。
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']