用多行文字填充占位符

时间:2019-09-12 18:02:00

标签: python python-3.x

我是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

1 个答案:

答案 0 :(得分:0)

您想做的事subclassing string.Template(您可以在通常的地方找到docssource 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]: