-1

1 つの基本的な質問 (以下の #1) と、答えがわからない質問 (#2) があります。誰でも入力を提供できますか?

1.検索を特定のものだけにextensions限定.cする.h方法.cpp

2.以下のin変数"."の前のドットをオプションにする方法"\n"usertring

userstring="Copyright (c) 2012 Company, Inc.\nAll Rights Reserved.\nCompany Confidential and Proprietary." variable

import os
import sys
import fnmatch
userstring="Copyright (c) 2012 Company, Inc.\nAll Rights Reserved.\nCompany Confidential and Proprietary."
print len(sys.argv)
print sys.argv[1]
if len(sys.argv) < 2:
    sys.exit('Usage: python.py <build directory>')
for r,d,f in os.walk(sys.argv[1]):
    for files in f:
        userlines = userstring.split('\n') # Separate the string into lines
        if files.endswith("." + c) or files.endswith("." + cpp):
            with open(os.path.join(r, files), "r") as file:
                match = 0
                for line in file:
                    if userlines[match] in line.strip('\n\r .'): # Check if the line at index `m` is in the user lines
                        match += 1 # Next time check the following line
                    elif match > 0: # If there was no match, reset the counter
                        match = 0
                    if match >= len(userlines): # If 3 consecutive lines match, then you found a match
                        break
                if match != len(userlines): # You found a match
                    print files

コンパイル エラー:-

  File "test.py", line 12, in <module>
    if files.endswith("." + c) or files.endswith("." + cpp):
NameError: name 'c' is not defined
4

3 に答える 3

0

質問1については、おそらくos.path.splitext()を使用する必要があります。

>>> os.path.splitext('/home/myfile.txt')
('/home/myfile', '.txt')
于 2012-12-25T00:30:14.140 に答える
0

最初の問題を解決するには:

特定の拡張子で終わるファイルを検索する場合は、ファイル名を含むstrでendswith()メソッドをいつでも使用できます。たとえば、次のようなものです。

if filename.endswith("." + extension1) or filename.endswith("." + extension2)

filenameは「foo.c」のようなstrになり、extension1は「c」のような別のstrになり、extension2は「cpp」になります。

ソース:http ://docs.python.org/2/library/stdtypes.html#str.endswith

于 2012-12-25T00:37:20.597 に答える
0

次に、fnmatchモジュールを使用して、パターン マッチに対してファイル名をテストします。

正規表現は、検索対象のバリエーションに一致させるのに役立ちます。

import os
import sys
import re
import fnmatch

# Build a match pattern with optional periods and any amount of whitespace
# between the sentences.
userstring = re.compile(r"Copyright \(c\) 2012 Company, Inc\.?\sAll Rights Reserved\.?\sCompany Confidential and Proprietary\.?")

print len(sys.argv)
print sys.argv[1]
if len(sys.argv) < 2:
    sys.exit('Usage: python.py <build directory>')
for path,dirs,files in os.walk(sys.argv[1]):
    for fname in files:
        # Test the filename for particular pattern matches.
        for pat in ['*.cpp','*.c','*.h']:
            if fnmatch.fnmatch(fname,pat):
                fullname = os.path.join(path,fname)
                with open(fullname) as f:
                    # This expects the copyright to be in the first 1000 bytes
                    # of the data to speed up the search.
                    if userstring.search(f.read(1000)):
                        print fullname

上記のコードが一致するファイルは次のとおりです。

blah
blah
Copyright (c) 2012 Company, Inc
All Rights Reserved.
Company Confidential and Proprietary.
blah
blah
blah
于 2012-12-25T01:07:39.927 に答える