2017-11-16 9 views
0

私は、ファイルLinuxの特定の行を置き換えるpythonでスクリプトを書いています。 、iがしかしPython re特定の構文

hi 90 

#! /usr/bin/env python 

import re 

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

私の望ましい結果は次のとおりです。ここで

hi 873840 

は私のスクリプトです:私が含まれている/ homeディレクトリのHIと呼ばれるファイルを持っていると言いますそれを実行すると、このエラーが発生し、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

're.sub(パターン、REPL、文字列、= 0をカウントし、フラグ= 0)'であると仮定しますなぜあなたがエラーを取得しているかを示すファイルポインタ。 – chakri

+0

[正規表現を使用してファイル内の文字列を置換する]の可能な複製(https://stackoverflow.com/questions/35688126/replace-string-in-file-with-using-regular-expressions) –

答えて

0

ファイルを読み取りモードで開く必要があります。 re.subは、3つの引数、pattern, repl, stringを想定しています。問題は、渡している3番目の引数がファイルポインタです。
例:

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())) 
1

使用"r"よりは"w"モードは書き込み用に空のファイルを作成し、ファイルを読み込みます。 .readline()は文字列を取得してre.sub()に渡します。 r" .*"は、'space'文字の後に置換する文字列を返します。 3番目のパラメータは文字列ではありません:私は'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

解決策を説明するテキスト問題を尋ねた人には役に立ちそうです。 –

+1

通知と提案に感謝します。新しいスタックオーバーフロー – Gio