Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法从文件中提取文本并从中生成词典?_Python_Dictionary - Fatal编程技术网

Python 有没有办法从文件中提取文本并从中生成词典?

Python 有没有办法从文件中提取文本并从中生成词典?,python,dictionary,Python,Dictionary,所以我有一个文件: 狗[‘吠叫’、‘吃’、‘飞’] 猫[‘喵’、‘吃’、‘飞’] 它们之间有2个'\n'。我需要把它们提取出来并转换成字典。 当我试图使用readlines从中读取文本时,我会得到如下项目列表: “狗[‘吠叫’、‘吃’、‘飞’]\n”、“\n”、“猫[‘喵喵’、‘吃’、‘飞’]\n”、“\n”] 我想买一本这样的字典。。。动物[狗]=“吠叫”,“吃”,“飞”,猫也是如此。我应该用什么`也许可以把它们分开或其他任何东西。这里有一个简单的解决方案。它需要一些字符串操作,但我认为它应该

所以我有一个文件:

狗[‘吠叫’、‘吃’、‘飞’]

猫[‘喵’、‘吃’、‘飞’]

它们之间有2个'\n'。我需要把它们提取出来并转换成字典。 当我试图使用readlines从中读取文本时,我会得到如下项目列表:

“狗[‘吠叫’、‘吃’、‘飞’]\n”、“\n”、“猫[‘喵喵’、‘吃’、‘飞’]\n”、“\n”]


我想买一本这样的字典。。。动物[狗]=“吠叫”,“吃”,“飞”,猫也是如此。我应该用什么`也许可以把它们分开或其他任何东西。

这里有一个简单的解决方案。它需要一些字符串操作,但我认为它应该适合您的需要

animals = {}
with open("file.txt") as file_in:
    lines = []
    for line in file_in:
        if (line != "\n"):
            key = line.rstrip().split('[')[0]
            val = (line.rstrip().split('[')[1][:-1]).replace("'", "").replace(" ", "").split(',')
            animals[key] = val

print(animals)

首先,我们需要将字符串转换为更好的格式:

animalValues=[“狗['bark'、'eat'、'fly']\n”、'\n'、“猫['meow'、'eat'、'fly']\n”、'\n']
animalValues=[i.replace(“\n”,”),如果i!=“\n”]
然后,我们将列表转换为dict:

animalDict={i.split(“[”[0]:[p.replace(“”,”)表示i.split(“[”[1])。split(“]”[0]。split(“,”)表示i在animalValues}

这里有一个使用正则表达式的解决方案:

import json
import re

s = '''Dog['bark','eat','fly']

Cat['meow', 'eat ', 'fly']'''

dictionary = {}
for line in s.split('\n'):
    if line:
        search = re.search('^([a-zA-Z]+)(\[.+\])$', line, re.IGNORECASE)
        if search:
            key, arr = search.groups()
            dictionary[key] = json.loads(arr.replace('\'', '"'))

print(dictionary)
输出:

{'Cat': ['meow', 'eat ', 'fly'], 'Dog': ['bark', 'eat', 'fly']}

对于更健壮的解决方案,由于输入实际上是有效的Python代码,并且有几个命名对象被元组分割,因此可以使用
ast.parse
将输入解析为ast节点,并像下面这样迭代名称元组对:

import ast
s = '''Dog['bark','eat','fly']

Cat['meow', 'eat ', 'fly']'''
{n.value.value.id: [i.value for i in n.value.slice.value.elts] for n in ast.parse(s).body}
这将返回:

{'Dog': ['bark', 'eat', 'fly'], 'Cat': ['meow', 'eat ', 'fly']}

你能发布你尝试过的吗?用open('input.txt','r')作为文件:text=file.readlines()text.replace('\n',''),我坚持这一点。在这种情况下,也许我应该使用正则表达式?这里不需要使用
ast.literal\u eval
。你可以通过replace函数删除
{'Dog': ['bark', 'eat', 'fly'], 'Cat': ['meow', 'eat ', 'fly']}