嵌套列表:将列表中的字符串追加到列表之前

时间:2019-04-26 16:26:51

标签: python python-3.x

作为练习,我想尝试分析我的Whatsapp聊天。我打开了.txt文件,在文件上使用了reader()list(),并删除了空白行/列表。其余列表具有以下格式:chat = [[01.01.2019, 12:00 - name1: message1][message2] … ]

我想获取仅包含消息(不包含日期,时间和名称)的列表,并将其与之前的列表合并。 最终应该是这样的:

chat = [[01.01.2019, 12:00 - name1: message1 message2] … ]

我尝试了以下循环,如果列表不以数字开头,则内容将存储在变量中,但不附加任何内容,循环完成后,变量仅具有消息的最后一个实例列表存储在其中。

for row in chat:    # add to row before if no date in line
    row = list(row)
    without = ""
    if row[0].isalpha():
        without = row[0]
    else:
        row.append(without)

预先感谢:)

1 个答案:

答案 0 :(得分:1)

执行一个复杂的任务,并将其分解为不同的简单任务。

这是一个生成器的示例,该生成器从多行源中读取并输出所需的实际行,并使用某些格式来处理换行符。

# this is the condition from your code
def is_new_line(line):
    tokens = list(line)
    if tokens and not tokens[0].isalpha():
        return True
    return False

# this is a generator that takes multiline chats and outputs full rows without newlines
def line_generator(chat):
    row = []
    for line in chat:
        if is_new_line(line):
            if (row):
                yield ' '.join(row)
            row = [line.rstrip()]
        else:
            row.append(line.rstrip())
    if (row):
        yield ' '.join(row)

# sample data
chat = ['1 one\n', 'two\n', 'three\n', '2 one\n', 'two\n', 'three\n']

# the generator just outputs the rows as you want them defined
for row in line_generator(chat):
    print(row)
  

1一2 3
  2 1 2 3