-1

できる限りの質問にお答えします

基本的に、私は 500 以上のファイルで探している 70 の単語のリストを持っており、それらを新しい単語と数字に置き換える必要があります。

つまり...「hello」を見つけて「hello 233.4」に置き換えますが、70の単語/数字と500以上のファイルがあります。

ここで有益な投稿を見つけましたが、sys.argv、re、検索、置換などについて読んでいます...など..など..このコードのビットを理解できません。Windows 7の「cmd」ウィンドウからscriptname.py「-i」および「-o」を使用して「呼び出し」ています(と思います)...

誰かが入力検索リストのパス「c:/input/file/path/searchlist.txt」の例と、検索するファイルのパスの例「c:/search/this/file/searchme.txt」を正しい場所に入れることができればポジションください!(自分でフォルダー内のすべてのファイルを繰り返し、自分で置換を強調表示または太字にしようとします。)

私は多くの組み合わせを試しました...私は行ったすべての変更を調べることができ、日/ページ/日/ページを入力することができました...毎日/ページは毎回ますます愚かになります!

ありがとう... または別の方法を知っている場合は、アドバイスを提案してください。

元の投稿へのリンクは次のとおりです。

Python を使用して、1 つの .txt ファイルから単語または語句のリストを検索します (コンテキストを表示します)。

元の投稿のコードは次のとおりです。

import re
import sys

def main():
  if len(sys.argv) != 3:
    print("Usage: %s fileofstufftofind filetofinditin" % sys.argv[0])
    sys.exit(1)

  with open(sys.argv[1]) as f:
    patterns = [r'\b%s\b' % re.escape(s.strip()) for s in f]
  there = re.compile('|'.join(patterns))

  with open(sys.argv[2]) as f:
    for i, s in enumerate(f):
      if there.search(s):
        print("Line %s: %r" % (i, s))

main()
4

2 に答える 2

1

あなたが上に投稿したコードは、あなたの割り当てに必要なものに対しておそらく複雑です。おそらく、次のようなより単純なものの方が理解しやすいでしょう。

# example variables
word_mapping = [['horse', 'donkey'], ['left', 'right']]
filename = 'C:/search/this/file/searchme.txt'

# load the text from the file with 'r' for "reading"
file = open(filename, 'r')
text = file.read()
file.close()

# replace words in the text
for find_word, replacement in word_mapping:
    text = text.replace(find_word, replacement)

# save the modified text to the file, 'w' for "writing"
file = open(filename, 'w')
file.write(text)
file.close()

置換する単語のリストをロードするには、次のようにするだけです。

words_path = 'C:/input/file/path/searchlist.txt'
with open(words_path) as f:
    word_mapping = [line.split() for line in f]

str.split()デフォルトでは、文字列を空白 (スペース、タブ) で分割しますが、他の文字や「単語」で分割することもできます。たとえば、使用するカンマ区切りファイルがline.split(',')あり、カンマで分割されている場合。


あなたが上に投稿したコードの説明として..いくつかの別々のことが起こっているので、いくつかの部分に分けてみましょう。

if len(sys.argv) != 3:
    print("Usage: %s fileofstufftofind filetofinditin" % sys.argv[0])
    sys.exit(1)

この特定のスクリプトは、wordslist とターゲット ファイルへのパスをコマンド ライン引数として受け取るため、このスクリプトを として実行できますpython script_name.py wordslist_file target_file。つまり、スクリプトでファイル パスをハードコードするのではなく、ユーザーが実行時に指定できるようにします。

sys.argvコードのこの最初の部分は、コマンド ライン パラメータを文字列として含むリストであるの長さをチェックすることによって、スクリプトに渡されたコマンド ライン パラメータの数をチェックします。コマンド ライン パラメータの数が 3 に等しくない場合、エラー メッセージが出力されます。最初 (または 0 番目) の引数はスクリプトのファイル名であるためsys.argv[0]、エラー メッセージの一部として出力されます。

with open(sys.argv[1]) as f:
    patterns = [r'\b%s\b' % re.escape(s.strip()) for s in f]
    there = re.compile('|'.join(patterns))

これにより、単語 (ファイル名がsys.argv[1]) を含むファイルが開かれ、それらの正規表現オブジェクトがコンパイルされます。正規表現を使用すると、一致する単語をより詳細に制御できますが、独自の「ミニ言語」があり、経験がない場合は非常に混乱する可能性があります. このスクリプトは単語を検索するだけで置換しないことに注意してください。したがって、使用する単語を含むファイルには、1 行に 1 つの「単語」しか含まれていません。

with open(sys.argv[2]) as f:
    for i, s in enumerate(f):
        if there.search(s):
            print("Line %s: %r" % (i, s))

これにより、ターゲット ファイル (2 番目のコマンド ライン パラメーターのファイル名) が開き、sys.argv[2]そのファイル内の行がループされます。行に wordslist の単語が含まれている場合は、行全体が出力されます。

于 2013-10-29T19:48:29.280 に答える