2016-12-01 24 views
0

私はPython 3で書いたいくつかのコードについてフィードバックを得たいと思っています。ページ番号を持つ入力ファイルを読み込むプログラムを作成しようとしています。ページ番号は「[13]」(13ページにある)の形式で表示されます。私のコードは今ある:私も試してみました特定の文字列を見つけて削除する

pattern='\[\d\]' 

for line in f: 
if pattern in line: 
    re.sub('\[\d\]',' ') 
    re.compile(line) 
    output.write(line.replace('\[\d\]', '')) 

:私はこれらのプログラムを実行すると

​​

を、空のファイルは、むしろ元のテキストマイナスページ番号を含むファイルよりも、作成されます。事前にアドバイスをありがとうございます!

答えて

1

正規表現マッチを行わないため、if文が機能しない場合は、リテラル文字列\[\d\]lineに探します。

for line in f: 
    # determine if the pattern is found in the line 
    if re.match(r'\[\d\]', line): 
     subbed_line = re.sub(r'\[\d\]',' ') 
     output_file.writeline(subbed_line) 

さらに、re.compile()を間違って使用しています。その目的は、パターンを関数にプリコンパイルすることです。これは、ループするたびに再評価するのではなく、式を一度だけ評価するため、パターンを多く使用するとパフォーマンスが向上します。

pattern = re.compile(r'\[\d\]') 

if pattern.match(line): 
    # ... 

最後にファイル全体として文字列を書き込みoutput_file.write()を使用しているので、あなたは空のファイルを取得しています。代わりに、output_file.writeline()を使用してファイルに行を書き込む必要があります。

0

出力に変更されていない行を書き込まないでください。

は、出力ファイルが空である理由です。この

if pattern in line: 
    #remove page number stuff 
output_file.write(line) # note that it's not part of the if block above 

のようなものを試してみてください。

関連する問題