我有一个.txt文件,格式如下:
AM|75019|Caribbean from 15N to 18N between 80W and 85W|18.757950|-81.741300
AM|75021|Caribbean from 15N to 18N between 72W and 80W|18.757950|-81.741300
AM|75015|Caribbean approaches to the Windward Passage|15.133340|-68.139050
我想只提取前两列用作key:value
。例如,AM:75019
,AM:75021
等。我是python的新手(使用2.6),我不知道如何做到这一点。我搜索过并找到了多个答案,这些答案并不完全有意义,因为有多列。
答案 0 :(得分:1)
Python中的字典不能有重复的键,因此您可以做的最接近的事情是存储与每个键关联的值列表。
您的文件由字符分隔值组成,因此使用Python的csv
模块会将文件解析为单独的字段。
这是实现你想要的一种方式。请注意,您还可以使用添加到Python v2.5中的collections.defaultdict
类,而不是定义自己的类,如下所示:
import csv
from pprint import pprint
class ListDict(dict):
""" Dictionary who's values are lists. """
def __missing__(self, key):
value = self[key] = []
return value
filename = 'multi_col.csv'
lstdct = ListDict()
with open(filename, 'rb') as csvfile:
for row in csv.reader(csvfile, delimiter='|'):
key, value = row[:2]
lstdct[key].append(value)
pprint(lstdct) # -> {'AM': ['75019', '75021', '75015']}
答案 1 :(得分:1)
按照以下步骤操作,将预期响应作为输出数组
将file.txt添加到项目结构中 - 在新的extractinfo.py中添加以下代码 - 执行它
SoundPool.load()
答案 2 :(得分:0)
您可能想要使用split function。
使用'|'你将为每一行获得几个令牌的分隔符。为了您的目的,您只需要使用前两个。
这是一个小片段
ze_dict = {}
ze_file = open(my_file_path, 'r')
ze_lines = ze_file.read().splitlines()
for l in ze_lines:
ze_tokens = l.split('|')
ze_dict[ze_tokens[0]] = ze_tokens[1]
ze_file.close()
Ofc你可以在这个片段中添加错误控制!
请注意这是注意到这种方式最为诡辩的方法(见其他答案)
答案 3 :(得分:0)
以下代码可以满足您的需求:
with open('somefile.txt', 'r') as f:
d = {line.split('|')[0]: line.split('|')[1] for line in f}
答案 4 :(得分:0)
我想只提取第一个用作键的值:value。对于 例如,AM:75019,AM:75021等......
如果密钥在dict中重复,则第二个键值对将覆盖第一个键值对,因为字典只能为每个键设置一个值。
如果想要使用相同键的值,可以查看defaultdict
以下是示例代码,
In [1]: from collections import defaultdict
In [2]: lines = tuple(open('test.txt', 'r'))
In [3]: data_dict = defaultdict(list)
In [4]: for line in lines:
...: data_dict[line.split('|')[0]].append(line.split('|')[1])
...:
In [5]: data_dict
Out[5]: defaultdict(list, {'AM': ['75019', '75021', '75015']})
In [6]: