3

スクリプトを反復処理せずに、現在の作業ディレクトリ内のすべてのファイルに対してスクリプトを反復処理することを検討しています (したがって、任意の拡張子.py)。以前はこれを使っていました

for fileName in os.listdir('.'):
    if fileName != 'autocorrelation1.py':
        with open(fileName, "r") as input:

        REST OF SCRIPT HERE

フォルダーにautocorrelation.pyというスクリプトが1つしかないときに機能しましたが、今ではいくつかのpythonスクリプトがあり*、たとえばbashスタイルの同等物があるかどうか疑問に思っていました

for fileName in os.listdir('.'):
    if fileName != *'.py':
        with open(fileName, "r") as input:

        REST OF SCRIPT HERE

私は怠け者で、別のコード行でそれを行うことができると思いますが、誰かがもっと楽しい方法を知っているかどうか疑問に思っていました!

4

5 に答える 5

9

fnmatchモジュールの使用をお勧めします。

for fileName in os.listdir('.'):
    if not fnmatch.fnmatch(fileName, '*.py'):
        print fileName

globモジュールは、一致するファイルを見つけるのに役立ちます。

for fileName in glob.glob('*.py'):
    print fileName
于 2012-05-31T12:57:02.867 に答える
6

この特定のケースでは、最も簡単な解決策は

if not file_name.endswith(".py"):

代替案は

if not fnmatch.fnmatch(file_name, "*.py"):
于 2012-05-31T12:56:58.243 に答える
1

globとワイルドカードを使用してファイルのセット(またはサブセット)をチェックし、endswith()を使用してファイルをフィルタリング.pyします。

例えば、

import glob

for fn in glob.glob('*'):  # specify set of files to check
   if not fn.endswith('.py'): 
      print(fn)

更新/明確化された質問に従ってコードが更新されました。

この今週のPythonモジュールには、 globを使用したその他の例があります

于 2012-05-31T12:57:19.273 に答える
1

globモジュールに加えて、これらのジェネレーターを確認することをお勧めします。具体的にはこれ:

# genfind.py
#
# A function that generates files that match a given filename pattern

import os
import fnmatch

def gen_find(filepat,top):
    for path, dirlist, filelist in os.walk(top):
        for name in fnmatch.filter(filelist,filepat):
            yield os.path.join(path,name)

# Example use

if __name__ == '__main__':
    lognames = gen_find("access-log*","www")
    for name in lognames:
        print name
于 2012-05-31T12:58:17.007 に答える
0

モジュールを使用します。ここでre見つけることができます

re.search('^.*py$',str(yourFileName))

そして、これは出力です:

>>> import re
>>> 
>>> a = re.search('^.*py$','prova')
>>> a
>>> a = re.search('^.*py$','prova.py')
>>> a
<_sre.SRE_Match object at 0x2b09559c1760>
于 2012-05-31T12:56:43.160 に答える