python实现的用于搜索文件并进行内容替换的类实例
本文实例讲述了python实现的用于搜索文件并进行内容替换的类。分享给大家供大家参考。具体实现方法如下:
#!/usr/bin/python -O # coding: UTF-8 """ -replace string in files (recursive) -display the difference. v0.2 - search_string can be a re.compile() object -> use re.sub for replacing v0.1 - initial version Useable by a small "client" script, e.g.: ------------------------------------------------------------------------------- #!/usr/bin/python -O # coding: UTF-8 import sys, re #sys.path.insert(0,"/path/to/git/repro/") # Please change path from replace_in_files import SearchAndReplace SearchAndReplace( search_path = "/to/the/files/", # e.g.: simple string replace: search_string = 'the old string', replace_string = 'the new string', # e.g.: Regular expression replacing (used re.sub) #search_string = re.compile('{% url (.*?) %}'), #replace_string = "{% url '\g<1>' %}", search_only = True, # Display only the difference #search_only = False, # write the new content file_filter=("*.py",), # fnmatch-Filter ) ------------------------------------------------------------------------------- :copyleft: 2009-2011 by Jens Diemer """ __author__ = "Jens Diemer" __license__ = """GNU General Public License v3 or above - http://www.opensource.org/licenses/gpl-license.php""" __url__ = "http://www.jensdiemer.de" __version__ = "0.2" import os, re, time, fnmatch, difflib # FIXME: see http://stackoverflow.com/questions/4730121/cant-get-an-objects-class-name-in-python RE_TYPE = type(re.compile("")) class SearchAndReplace(object): def __init__(self, search_path, search_string, replace_string, search_only=True, file_filter=("*.*",)): self.search_path = search_path self.search_string = search_string self.replace_string = replace_string self.search_only = search_only self.file_filter = file_filter assert isinstance(self.file_filter, (list, tuple)) # FIXME: see http://stackoverflow.com/questions/4730121/cant-get-an-objects-class-name-in-python self.is_re = isinstance(self.search_string, RE_TYPE) print "Search '%s' in [%s]..." % ( self.search_string, self.search_path ) print "_" * 80 time_begin = time.time() file_count = self.walk() print "_" * 80 print "%s files searched in %0.2fsec." % ( file_count, (time.time() - time_begin) ) def walk(self): file_count = 0 for root, dirlist, filelist in os.walk(self.search_path): if ".svn" in root: continue for filename in filelist: for file_filter in self.file_filter: if fnmatch.fnmatch(filename, file_filter): self.search_file(os.path.join(root, filename)) file_count += 1 return file_count def search_file(self, filepath): f = file(filepath, "r") old_content = f.read() f.close() if self.is_re or self.search_string in old_content: new_content = self.replace_content(old_content, filepath) if self.is_re and new_content == old_content: return print filepath self.display_plaintext_diff(old_content, new_content) def replace_content(self, old_content, filepath): if self.is_re: new_content = self.search_string.sub(self.replace_string, old_content) if new_content == old_content: return old_content else: new_content = old_content.replace( self.search_string, self.replace_string ) if self.search_only != False: return new_content print "Write new content into %s..." % filepath, try: f = file(filepath, "w") f.write(new_content) f.close() except IOError, msg: print "Error:", msg else: print "OK" print return new_content def display_plaintext_diff(self, content1, content2): """ Display a diff. """ content1 = content1.splitlines() content2 = content2.splitlines() diff = difflib.Differ().compare(content1, content2) def is_diff_line(line): for char in ("-", "+", "?"): if line.startswith(char): return True return False print "line | text\n-------------------------------------------" old_line = "" in_block = False old_lineno = lineno = 0 for line in diff: if line.startswith(" ") or line.startswith("+"): lineno += 1 if old_lineno == lineno: display_line = "%4s | %s" % ("", line.rstrip()) else: display_line = "%4s | %s" % (lineno, line.rstrip()) if is_diff_line(line): if not in_block: print "..." # Display previous line print old_line in_block = True print display_line else: if in_block: # Display the next line aber a diff-block print display_line in_block = False old_line = display_line old_lineno = lineno print "..." if __name__ == "__main__": SearchAndReplace( search_path=".", # e.g.: simple string replace: search_string='the old string', replace_string='the new string', # e.g.: Regular expression replacing (used re.sub) #search_string = re.compile('{% url (.*?) %}'), #replace_string = "{% url '\g<1>' %}", search_only=True, # Display only the difference # search_only = False, # write the new content file_filter=("*.py",), # fnmatch-Filter )
希望本文所述对大家的Python程序设计有所帮助。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。
