Python re.sub特定语法

时间:2017-11-16 04:20:00

标签: python linux scripting

我在python中编写一个脚本来替换Linux文件中的特定行。假设我在/ home目录中有一个名为hi的文件,其中包含:

hi 873840

这是我的剧本:

#! /usr/bin/env python

import re

fp = open("/home/hi","w")
re.sub(r"hi+", "hi 90", fp)

我期望的结果是:

hi 90

但是,当我运行它时,我收到此错误,hi文件最终成为balnk:

Traceback (most recent call last):
  File "./script.py", line 6, in <module>
    re.sub(r"hi+", "hi 90", fp)
  File "/usr/lib/python2.7/re.py", line 155, in sub
    return _compile(pattern, flags).sub(repl, string, count)
 TypeError: expected string or buffer

我的语法有问题吗? 感谢

2 个答案:

答案 0 :(得分:1)

使用"r"更多来读取文件,"w"模式将创建用于写入的空文件。 .readline()将获取并将字符串传递给re.sub()r" .*"将在'space'字符后返回您要替换的字符串。我假设'hi 873840'是您文件中的唯一文字,而您所需的输出仅为'hi 90'

echo "hi 873840" > hi.txt

python3.6

import re
fp = open("hi.txt", "r")
print(re.sub(r" .*", " 90", fp.readline()))

答案 1 :(得分:0)

您应该以读取模式打开文件。 re.sub需要三个参数pattern, repl, string。问题是你传递的第三个参数是文件指针 例如:

import re
with open('/home/hi', 'r', encoding='utf-8') as infile:
    for line in infile:
       print(re.sub(r"hi+", "hi 90", line.strip()))