Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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_List_Text_Save - Fatal编程技术网

在python中读取文本文件并从中创建两个列表

在python中读取文本文件并从中创建两个列表,python,list,text,save,Python,List,Text,Save,我有一个文本文件,上面有对话 person 1: "quotes" person 2:"quotes2" . . . person 1:"quotes 3" person 2:"quotes 4" 第1人:“引用” 第二人称:“引用2” . . . 人1:“引用3” 第二人:“引语4” 我想读一个人的每一句话,把它放在一个列表中,然后再保存为一个文本文件。和另一个不同的列表来保存person 2的引号,并保存在另一个不同的文件中。如何使用python使每个引号可以是一行或多行?您可以创建一个字典

我有一个文本文件,上面有对话

person 1: "quotes" person 2:"quotes2" . . . person 1:"quotes 3" person 2:"quotes 4" 第1人:“引用” 第二人称:“引用2” . . . 人1:“引用3” 第二人:“引语4”
我想读一个人的每一句话,把它放在一个列表中,然后再保存为一个文本文件。和另一个不同的列表来保存person 2的引号,并保存在另一个不同的文件中。如何使用python使每个引号可以是一行或多行?

您可以创建一个字典,其中键是作者的姓名,值是他们的引号列表。我会用一个简单的方法使事情变得容易。使用字典的一个好处是你可以有未知数量的作者

from collections import defaultdict

filename = "your_path.txt"

# This is a dictionary of lists
quotes = defaultdict(list)

with open(filename) as f:
    lines = f.readlines()
    index = 0
    while index < len(lines):
        try:
            author, quote = lines[index].strip().split(':')
            # If it doesn't end in quote, keep reading until it does
            while not quote[-1] == '"':
                index += 1
                quote += "\n" + lines[index].strip()
            quotes[author].append(quote.strip('"'))
        except ValueError:
            pass
        index += 1

for key, value in quotes.items():
    print(f"{key}: {value}")
从集合导入defaultdict
filename=“your_path.txt”
#这是一本列表词典
quotes=defaultdict(列表)
打开(文件名)为f时:
行=f.读行()
索引=0
当索引
输出将类似于

person 1: ['quotes', 'quotes 3'] person 2: ['quotes2', 'quotes 4'] 第1人:['quotes','quotes 3'] 第二人称:['quotes2','quotes4']
您可以修改以写入文件而不是控制台。

Hi-Mee!请共享文件的一小部分,并指定两个列表的格式。我现在不明白你的问题。还可以共享您迄今为止尝试过的代码。您可以使用字典,其中键是此人的姓名,值是此人的引号列表。@johny mopp:如何检查引号是否属于该人,而该人应该是该键?考虑到报价可能是一行或多行?很抱歉回复太晚-我出去吃午饭了。我已经打好了答案。非常感谢你的评论。但是,我获取值错误:ValueError:此行中的值不足,无法解包(预期为2,获取1),作者,quote=line.split(“:”),这意味着文件中至少有一行的格式不是“author:quote”。我会更新答案是的,这是因为我提到报价可能是一行或多行。有办法解决这个问题吗?