我是python的新手,无法解决这个问题。 我必须阅读一个文本文件,其值在方括号中。
你好[用户], 您是通过[ip]
连接的用户:[user] 登录日期:[datetime]
我应该阅读文件,获取文本,替换[]之间的值,并将它们写入保留换行符的数据库(\ n)。
我试图逐行读取文件,但无法替换所需的值。
with open('message.txt', 'r') as file:
msg = file.readlines()
msg = file.replace('[user]', user)
也许我没有使用正确的方法。
更新: 我找到了这个解决方案, 具有如下文本文件message.txt:
Hello [user],
you ip is [ip]
login date [date]
我写这段代码:
with open('message.txt') as file:
f = file.readlines()
newmessage = ''
user = 'abc'
ip = '127.0.0.1'
date = '2019-01-01'
for i in f:
if '[user]' in i:
line = i.replace('[user]', user)
if '[ip]' in i:
line = i.replace('[ip]', ip)
if '[date]' in i:
line = i.replace('[date]', date)
newmessage += line
print(type(newmessage))
print(newmessage)
结果是这样的:
<class 'str'>
Hello abc,
you ip is 127.0.0.1
login date 2019-01-01
答案 0 :(得分:0)
您想做的事subclassing string.Template
(您可以在通常的地方找到docs和source code)。
In [1]: from string import Template
In [2]: class Bracket_template(Template):
...: delimiter = '['
...: pattern = r'''
...: \[(?:
...: (?P<escaped>\[) | # Expression [[ will become [
...: (?P<named>[^\[\]\n]+)\] | # [, ], and \n can't be used in names
...: \b\B(?P<braced>) | # Braced names disabled
...: (?P<invalid>) #
...: )'''
In [3]: t = Bracket_template('''Hello [user], you are connected from [ip]
...: User: [user] login date: [datetime]''')
In [4]: data = (('Goofy', '25.12.20.19', '2019-12-25T00:01'),
...: ('Mickey', '01.01.20.20', '2020-01-01T11:51'))
In [5]: for user, ip, dt in data:
...: print(t.safe_substitute(user=user, ip=ip, datetime=dt))
Hello Goofy, you are connected from 25.12.20.19
User: Goofy login date: 2019-12-25T00:01
Hello Mickey, you are connected from 01.01.20.20
User: Mickey login date: 2020-01-01T11:51
In [6]: