python-3.x 如何使用Path.iterdir()返回的路径来扫描使用rglob()函数的文件?

cetgtptt  于 2023-02-17  发布在  Python
关注(0)|答案(1)|浏览(144)

我有一个主目录,其中有许多子目录。每个子目录进一步有各种PNG文件和一个子目录。我的问题总结在下面的代码片段。

# import
from from pathlib import Path, PurePath

# mount drive
drive.mount('/content/drive')

for path in Path('/content/drive/MyDrive/Cape-Windy/Annotated-frames_COCO/').iterdir():
  print(PurePath(Path(path).rglob('*.PNG')).stem)

这将生成
TypeError:应为字符串、字节或操作数。PathLike对象,而不是生成器
进一步实验:

for path in Path('/content/drive/MyDrive/Cape-Windy/Annotated-frames_COCO/').iterdir():
print(path)

生成子目录的路径
/内容/驱动器/我的驱动器/海角风/注解帧_COCO/海角_www.example.com ...和Windy-546053-processing_1-2020-10-25-19-29-44-759-coco-1.0.zip ... and

for path in Path('/content/drive/MyDrive/Cape-Windy/Annotated-frames_COCO/').iterdir():
print(Path(path).rglob('*.PNG'))

给予
〈生成器对象路径. rglob位于0x7f1c9b7d2f20〉...
根据文档,我怀疑Path.iterdir()返回的可能是一个PosixPath示例。虽然我不确定我的代码需要什么类型才能工作。如果有任何建议,我将不胜感激。代码是在google colab中用Python 3编写的,所有数据都在google drive中。

juud5qan

juud5qan1#

你遇到的问题是因为Path.rglob方法返回了一个生成器对象,它不是字符串、字节或os.PathLike对象。要获得每个PNG文件的基本名称,而不带扩展名,你需要循环遍历生成器并提取每个文件的词干。现在你可以解决这个问题了。

from pathlib import Path, PurePath

# mount the drive
drive.mount('/content/drive')

base_dir = Path('/content/drive/MyDrive/Cape-Windy/Annotated-frames_COCO/')

# loop through each subdirectory
for subdir in base_dir.iterdir():
    # loop through all PNG files in the subdirectory and its subdirectories
    for png_file in subdir.rglob('*.PNG'):
        # print the stem of each PNG file
        print(PurePath(png_file).stem)

这段代码循环遍历每个子目录,然后对每个子目录循环遍历所有PNG文件(包括子子目录中的文件),并打印每个文件的词干,即不带扩展名的基本名称。

相关问题