将.gz文件中的行附加到字典python

时间:2018-02-11 14:39:03

标签: python dictionary

我正在尝试从.gz文件

返回字典

以下是我的文件内容的外观:

[go]{"id": "1", "hello": 12345}
[gsdhgo]{"id": "2", "hello": 123456}
[hff]{"id": "3", "hello": 1234567}
[fska]{"id": "4", "hello": 12345678}

我的代码:

import gzip
import re

def removeSquareBrackets():
    contents = {}
    content = []
    with gzip.open('test_gzip_file.txt.gz') as f_in:
        for line in f_in:
            line = re.sub(r'.*{','{',line)
            line = line[:-1]
            content.append(line)
            contents[content] = []
    return contents


def printFun():
    print removeSquareBrackets()

printFun();

预期输出是字典:

{"id": "1", "hello": 12345}
{"id": "2", "hello": 123456}
{"id": "3", "hello": 1234567}
{"id": "4", "hello": 12345678}

任何人都可以纠正我或指导我正确的方向吗?

我正在TypeError: unhashable type: 'list'

1 个答案:

答案 0 :(得分:1)

在脚本的第12行,您尝试将列表内容用作词典内容中的键。但是列表不是可散列的类型。

如果您只是想要输出,那么为什么不仅仅是:

import gzip import json content = list() with gzip.open('tmp.file.gz') as f_in: for line in f_in: content.append(json.loads(line[line.find(']')+1:].strip()))

也许你有其他理由将这与字典和正则表达式的使用复杂化了吗?