我在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
我的语法有问题吗? 感谢
答案 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()))