web-dev-qa-db-ja.com

ディレクトリ内のすべてのファイルのリスト?

pathlibライブラリを使用して特定のディレクトリの下にあるすべてのファイルのリストを作成する関数を作成するのを手伝ってくれる人はいますか?

ここには、私が持っています:

enter image description here

私が持っています

  • c:\desktop\test\A\A.txt

  • c:\desktop\test\B\B_1\B.txt

  • c:\desktop\test\123.txt

上記のパスを持つ単一のリストがあると予想していましたが、私のコードはネストされたリストを返します。

ここに私のコードがあります:

from pathlib import Path

def searching_all_files(directory: Path):   
    file_list = [] # A list for storing files existing in directories

    for x in directory.iterdir():
        if x.is_file():

           file_list.append(x)
        else:

           file_list.append(searching_all_files(directory/x))

    return file_list


p = Path('C:\\Users\\akrio\\Desktop\\Test')

print(searching_all_files(p))

誰かが私を修正できることを願っています。

15
Akrios

Globを使用して、すべてのファイルとディレクトリをリストします。そして、それをフィルタリングします。

p = Path('C:\\Users\\akrio\\Desktop\\Test').glob('**/*')
files = [x for x in p if x.is_file()]
21
prasastoadi
from pathlib import Path
from pprint import pprint

def searching_all_files(directory):
    dirpath = Path(directory)
    assert(dirpath.is_dir())
    file_list = []
    for x in dirpath.iterdir():
        if x.is_file():
            file_list.append(x)
        Elif x.is_dir():
            file_list.extend(searching_all_files(x))
    return file_list

pprint(searching_all_files('.'))
13
MichielB

Os.listdir()を使用できます。ディレクトリ内にあるすべてのもの(ファイルとディレクトリ)を取得します。

ファイルだけが必要な場合は、os.pathを使用してこれをフィルターすることができます。

from os import listdir
from os.path import isfile, join
onlyfiles = [files for files in listdir(mypath) if isfile(join(mypath, files))]

または、os.walk()を使用して、アクセスするディレクトリごとに2つのリストを生成できます-ファイルとディレクトリに分割します。最上位のディレクトリのみが必要な場合は、最初のディレクトリを壊すことができます

from os import walk
files = []
for (dirpath, dirnames, filenames) in walk(mypath):
    files.extend(filenames)
    break
3
Aman Jaiswal
def searching_all_files(directory: Path):   
    file_list = [] # A list for storing files existing in directories

    for x in directory.iterdir():
        if x.is_file():
            file_list.append(x)#here should be appended
        else:
            file_list.extend(searching_all_files(directory/x))# need to be extended

    return file_list
1
Akrios