Python re.sub特定语法

Python re.sub特定语法,python,linux,scripting,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文件最终会被阻塞: Traceback (most recent call last):

我正在用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文件最终会被阻塞:

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
回溯(最近一次呼叫最后一次):
文件“/script.py”,第6行,在
re.sub(r“hi+”、“hi 90”、fp)
文件“/usr/lib/python2.7/re.py”,第155行,子文件
return\u compile(模式、标志).sub(repl、字符串、计数)
TypeError:应为字符串或缓冲区
我的语法有问题吗?
谢谢

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

使用
“r”
更多来读取文件,
“w”
模式将创建用于写入的空文件
.readline()
将获取字符串并将其传递给
re.sub()
r.“*”
将在
“空格”
字符后返回要替换的字符串。我假设
'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()))

re.sub(pattern,repl,string,count=0,flags=0)
:第三个参数是字符串而不是文件指针,这就是您出错的原因。描述您提出的解决方案的文本可能会重复,这对提问者很有用。感谢提醒和建议。stackoverflow的新特性
echo "hi 873840" > hi.txt

python3.6

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