2016-10-26 7 views
0

私は初心者で、次のタスクを持っています。python .cpp読み込み、追加、保存、終了しますが、動作しません。

  • ディレクトリ(フォルダ)をする.cppファイル(テキスト)で検索する開かれ、特定の文字列が+検索されたその後
  • 「完了」見つかったファイルに
  • 「完了」値が別のものに交換することがある(追加)「も、部分的に」
  • 、最後に保存され、「また作品」

問題は、私のスクリプトは、対応するエントリが見つかったということです、それはまた、「これまでにしかし、すべてを変える閉じその後、 "DE LETES "" 変更する必要があるのは何ですか?

ありがとうございました。

import re  
with open("test.cpp", "r+") as f: 
match = re.search("^(?P<Text1>.*)COMPILE_TIME_ASSERT\(\s*(?P<Text2>.+),(?P<Text3>\s*)(?P<Text4>\S*)(?P<Text5>\s*\)\s*;s*)",    "COMPILE_TIME_ASSERT(TABLE_LENGTH(PopupType2ActionID) == EPopupType::ARRAY_SIZE , PopupType2ActionID_table_needs_revision);") 

result = '"' + match.group('Text4') + '"' 

一致した場合:私が正しく理解

print("%sPCC_STATIC_ASSERT(%s,%s%s" % (match.group('Text1'), 
match.group('Text2'), result, match.group('Text5'))) 

f.write("%sPCC_STATIC_ASSERT(%s,%s%s" % (match.group('Text1'), match.group('Text2'), result, match.group('Text5'))) 

f.close() 
+0

あなたはどこで試合をしていますか? re.search(string_to_search、line) - >あなたの場合は "行はハードコードされています"?もっときれいにしてください。 –

答えて

0

場合は、文字列を見つけている - >マッチし、その後、新しい文字列を作成します。

残念ながら、あなたがやっているやり方は適切ではありません(どのようなプログラミング言語を使用していても)。これはあなたのファイルがr +としてオープンされているためですが、行を書くときに残りの部分はすべて削除されます:-)

正しく実行するためには、ソースファイルとコピー先ファイルが必要です。ちょうどそれを試してみるために、フォローで何ができるか[OK]を

f.write("%sPCC_STATIC_ASSERT(%s,%s%s" % (match.group('Text1'), match.group('Text2'), result, match.group('Text5'))) 

:1行でファイル全体を置き換える 1)()Microsoft Wordがやっているよう〜ファイルに元のファイルを移動します。

import shutil 
shutil.move(afile, afile+"~") 

destination= open(aFile, "w") 
source= open(aFile+"~", "r") 

2)元の

for line in source: 
    match = re.search(Your_matching, line) 

    if <matching_condition>: 
     destination.write(<New_LINE_after_match> + "\n") 
    else: 
    # All the other lines without match, just write back same line 
     destination.write(line) 

source.close() 
destination.close() 

これが発生するもう十分でしょう:それは簡単にあなたが今、元のファイルの行ずつ読むことができようにするには)

3); ndは元の名前を持つ新しいファイルに書き込みます適切なファイル。 〜ファイルを、あなたは、これはそうでなければ、これはあなたを明確に:-)

希望をLinuxのCLIでのsedコマンドを使用してファイルを変更:-)あなたはPythonでそれを行うことができます一つの方法です:-)

を削除することができます質問して問題を解決してください。良い一日を!

以下の簡単な例です。 ジョン ピーター マルコ ミッキー フランク・マルコため

import re,shutil,os 
aFile = "marco.txt" 
shutil.move(aFile, aFile+"~") 

destination= open(aFile, "w+") 
source= open(aFile+"~", "r") 

for line in source: 
    match = re.search("Marco", line) 

    if match: 
     destination.write("Modified_Line" + "\n") 
    else: 
    # All the other lines without match, just write back same line 
     destination.write(line) 

source.close() 
destination.close() 

os.remove(aFile+"~") 

出力:txtファイルで、私は簡単な名前を持っています。txtファイルは、プログラムを実行した後になります。

John 
Peter 
Modified_Line 
Mickey 
Frank 

これで問題が解決するはずです。おそらく最も大きな問題は、あなたのためのマッチング部分です。再モジュールで詳細をよく確認しなければならないことは、それは簡単なケースです。質問が解決したら私の答えに印をつけてください。

+0

私は何をしなければならないのか知りませんか? – invi86

+0

上記のいくつかの簡単なステップを追加しました:-)このヘルプをお願いします –

+0

ok。それを少し理解する。 私はそれが私のファイルにどのように挿入されるのかわかりません – invi86

関連する問題