将包含多列的 txt 文件转换为字典
Convert txt file with multiple columns to dictionary
我有一个 .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)的新手,不知道如何操作。我搜索并找到了多个不完全有意义的答案,因为有多个列。
您可能想要使用 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()
当然,您可以在此代码段中添加错误控制!
请注意,这是执行此操作的最 pythonic 方式(请参阅其他答案)
下面的代码会得到你想要的:
with open('somefile.txt', 'r') as f:
d = {line.split('|')[0]: line.split('|')[1] for line in f}
I want to extract only the first to columns to use as key:value. For
example, AM:75019, AM:75021, etc.....
如果一个键在字典中重复,第二个键值对将覆盖第一个键值对,因为字典每个键只能有一个值。
如果想要具有相同键的值,您可以查看 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]:
Python 中的字典不能有重复键,因此您最接近的做法是存储与每个键关联的值列表。
您的文件由字符分隔值组成,因此使用 Python 的 csv
模块可以轻松地将文件解析为单独的字段。
这里有一种方法可以完成您想要的。请注意,您还可以使用添加到 Python v2.5 中的 collections.defaultdict
class,而不是定义您自己的一个,如下所示:
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']}
按照以下步骤得到预期的响应作为输出数组
在项目结构中添加file.txt
- 在新 extractinfo.py 中添加以下代码
- 执行它
f = open('file.txt', 'r')
content = f.read()
allLines = content.split('\n')
output = []
for singleLine in allLines:
singleLine = singleLine.split('|')
extractedJSON = {}
extractedJSON[singleLine[0]] = singleLine[1]
output.append(extractedJSON)
print "output"
print output
f.close()
我附上了运行代码的图片。
我有一个 .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)的新手,不知道如何操作。我搜索并找到了多个不完全有意义的答案,因为有多个列。
您可能想要使用 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()
当然,您可以在此代码段中添加错误控制!
请注意,这是执行此操作的最 pythonic 方式(请参阅其他答案)
下面的代码会得到你想要的:
with open('somefile.txt', 'r') as f:
d = {line.split('|')[0]: line.split('|')[1] for line in f}
I want to extract only the first to columns to use as key:value. For example, AM:75019, AM:75021, etc.....
如果一个键在字典中重复,第二个键值对将覆盖第一个键值对,因为字典每个键只能有一个值。
如果想要具有相同键的值,您可以查看 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]:
Python 中的字典不能有重复键,因此您最接近的做法是存储与每个键关联的值列表。
您的文件由字符分隔值组成,因此使用 Python 的 csv
模块可以轻松地将文件解析为单独的字段。
这里有一种方法可以完成您想要的。请注意,您还可以使用添加到 Python v2.5 中的 collections.defaultdict
class,而不是定义您自己的一个,如下所示:
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']}
按照以下步骤得到预期的响应作为输出数组
在项目结构中添加file.txt - 在新 extractinfo.py 中添加以下代码 - 执行它
f = open('file.txt', 'r')
content = f.read()
allLines = content.split('\n')
output = []
for singleLine in allLines:
singleLine = singleLine.split('|')
extractedJSON = {}
extractedJSON[singleLine[0]] = singleLine[1]
output.append(extractedJSON)
print "output"
print output
f.close()
我附上了运行代码的图片。