将包含多列的 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:75019AM: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()

我附上了运行代码的图片。