作为练习,我想尝试分析我的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)
预先感谢:)
答案 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