0

このメモのギャップが新しい行を表すようなファイルがあります。

Hello World )
    ;

Hello World ) ;

Hello World )
;

セミコロンを前の行の末尾に移動する小さな python スクリプトを作成しました

with open(path) as f:
    prev_line =''
    for current_line in f:
        matched = re.match('[^(.+)];',current_line,re.MULTILINE)
        if matched is not None:
            current_line = re.sub('[^(.+)];','',current_line,re.MULTILINE)
            prev_line = re.sub(r'^(.+)$',r'\1 ;',prev_line,re.MULTILINE)
        print prev_line.strip()
        prev_line = current_line.strip()

セミコロンが欠落している最後の行を除いて、期待される出力を得ています

Hello World ) ;





Hello World ) ;



Hello World ) **semicolon is missing here**
4

3 に答える 3

3

使用してみてください\s*

>>> import re 
>>> s = '''Hello World )   
...         ;'''
>>> re.sub(r'\s*;', ';', s)
'Hello World );'

\s*;任意の量の空白(改行を含む)とそれに続くセミコロンに一致します。

また、re.sub()そのパターンの任意の数のインスタンスで機能するため、次のようにすることができます。

with open(path) as f:
    fixed = re.sub(r'\s*;', ';', f.read())
于 2012-11-07T07:44:20.680 に答える
0

セミコロンが常に独自の行にある場合は、次のように、ファイルを反復処理して前の行の末尾に追加することで見つけることができます。

file = open(path, 'r')
lines = file.readlines()
for line in lines:
  if ';' in line:
    lines[lines.index(line)-1] += line
    lines.remove(line)

脚注: 「;」の前にスペースを入れておきたいかどうかはよくわかりませんでした。可能な限り簡単な解決策をまとめました。

于 2012-11-07T07:55:57.773 に答える
0
with open('path/to/file') as infile:
    lines = infile.readlines()

if lines[-1].strip() == ';':
    lines.pop()
if lines[-1].strip()[-1] != ';'
    lines[-1] = lines[-1].rstrip() + ';'

with open('path/to/file', 'w') as outfile:
    outfile.write(''.join(lines))

お役に立てれば

于 2012-11-07T07:46:26.283 に答える