0

プログラムによって見つかった場合はファイルのパスを返したいが、すべてのファイルがチェックされるまでプログラムをループ (または再帰的に繰り返し) 続けたい。

def findAll(fname, path):
for item in os.listdir(path):
    n = os.path.join(path, item)
    try:
        findAll(n, fname)
    except:
        if item == fname:
            print(os.idontknow(item))

だから私はパスを呼び出すのに問題があります、今私は持っています

os.idontknow(item) 

プレースホルダーとして

入力は:

findAll('fileA.txt', 'testpath')

出力は次のとおりです。

['testpat\\fileA.txt', 'testpath\\folder1\\folder11\\fileA.txt','testpath\\folder2\\fileA.txt']
4

2 に答える 2

2

上記の私のコメントによると、これは現在のディレクトリから開始し、すべてのサブディレクトリを検索して、一致するファイルを探す例ですfname

import os

# path is your starting point - everything under it will be searched
path = os.getcwd()    
fname = 'file1.txt'
my_files = []

# Start iterating, and anytime we see a file that matches fname,
# add to our list    
for root, dirs, files in os.walk(path):
  for name in files:
    if name == fname:
      # root here is the path to the file
      my_files.append(os.path.join(root, name))

print my_files

または関数として(あなたの場合により適切です:)):

import os

def findAll(fname, start_dir=os.getcwd()):
  my_files = []
  for root, dirs, files in os.walk(start_dir):
    for name in files:
      if name == fname:
        my_files.append(os.path.join(root, name))
  return my_files


print findAll('file1.txt')
print findAll('file1.txt', '/some/other/starting/directory')
于 2012-11-05T04:09:24.190 に答える
1

このようなもの、多分?

import os
path = "path/to/your/dir"
for (path, dirs, files) in os.walk(path):
    print files
于 2012-11-05T04:04:43.097 に答える