python - 在一条线下找到一条线
问题描述
我正在为自己开发一个小程序,但在查找新文件中特定行下的写入行时遇到问题。
更具体地说,我有一个基本上是聊天记录的文件,第一行是一个人的名字,第二行是消息,第三行是另一个人的名字,等等。
聊天是这样进行的(出于隐私原因审查的消息):
Name1 Firstname1
Message sent by Name1 Firstname1
Name2 Firstname2
Message sent by Name2 Firstname2
Name1 Firstname1
Message sent by Name1 Firstname1
Name1 Firstname1
Message sent by Name1 Firstname1
如您所见,顺序可以是随机的,因为有人可以连续发送多条消息。
我试图这样做:
import re
def Sep(Source, OutputA):
with open(Source, 'r', encoding='utf8', errors='ignore') as fdin:
temp = fdin.readlines()
regex = re.compile(r"^(Name)+ (FirstName)")
result = [x for x in temp if regex.search(x)]
with open(OutputA, 'w', encoding='utf8', errors='ignore') as fdout:
fdout.writelines(result)
Sep('chat.txt','Results.txt')
我的Results.txt中的这个输出'Name FirstName',我想要做的是在Results.txt中的Name FirstName之后输出行。任何线索将不胜感激!提前致谢。
解决方案
你可以这样做:
import re
def Sep(Source, OutputA, user_name, user_firstname):
with open(Source, 'r', encoding='utf8', errors='ignore') as fdin:
text = fdin.read()
matches = re.finditer("^({}) ({})\n(.*)".format(user_name,user_firstname),text, re.MULTILINE)
with open(OutputA, 'w', encoding='utf8', errors='ignore') as fdout:
for match in matches:
fdout.write(match.group(3))
fdout.write("\n")
Sep('chats.txt','Results.txt', "Name1","Firstname1")
输出:
Message sent by Name1 Firstname1
Message sent by Name1 Firstname1
Message sent by Name1 Firstname1
推荐阅读
- javascript - 带有五彩纸屑的生日脚本只运行一次
- javascript - 使用 Babel 将现代 ES2017 转换为 ES5 的简单方法,用于使用 Node.js 的浏览器
- mysql - MySQL 查询在同一个表上有 2 个查询以匹配完全相同的值
- python - python生成的csv和转换的xlsx文件之间的大小差异
- vba - 在 Outlook 上将脚本作为 Word 荧光笔运行
- javascript - 如何监视异步函数并断言它由 sinon 引发错误?
- python - 索引数据框
- javascript - Vue组件,将计算属性分配给数据
- javascript - 固定元素上的 Javascript 交叉观察器
- python - Python:从 png 文件中读取 xmp 数据