Python 验证目录中可用的文件(.png、.json)是否以目录名开头

Python 验证目录中可用的文件(.png、.json)是否以目录名开头,python,Python,假设路径为“E:\vito”,则目录和子目录中可用的所有.PNG和.JSON文件都以目录前缀(vito)名称开头。像vito_1.json和vito_1.png。。。。python脚本可以是什么。有人能帮我吗?您可以尝试以下内容: import os PATH = 'E:/vito' root, _, files = os.walk(PATH).next() # or next(os.walk(...)) for python3 folder = os.path.split(root) s

假设路径为“E:\vito”,则目录和子目录中可用的所有.PNG和.JSON文件都以目录前缀(vito)名称开头。像vito_1.json和vito_1.png。。。。python脚本可以是什么。有人能帮我吗?

您可以尝试以下内容:

import os

PATH = 'E:/vito'

root, _, files = os.walk(PATH).next()  # or next(os.walk(...)) for python3
folder = os.path.split(root)
start_with_folder_name = [f for f in files if f.startswith(folder)]

如果要查找目录及其子目录中的所有.PNG和.JSON文件,请执行以下操作:

import os

valid_files = []
for folder, _, files in os.walk(r"E:\vito"):
    for file in files:
        filepath = os.path.join(folder, file)
        if (filepath.endswith(".png") or filepath.endswith(".json")) and filepath.startswith("vito"):
            valid_files.append(filepath)

下面是一个使用pathlib模块的解决方案。下面的函数返回未加目录名前缀的任何png或json文件。如果返回的列表不是空的,则断言并打印无效的文件名。如果返回的列表为空,则所有文件名都有效

从pathlib导入路径
def get_从(目录:路径)->[]获取无效文件:
dir_path=directory.resolve()
父文件夹=dir\u path.stem
files=dir_path.rglob('*'))
返回[str(f)for f in files if\u file\u invalid(f,prefix=parent\u folder)]
def文件无效(文件:路径,前缀:str)->bool:
返回['.png'、'.json']中的file.suffix.lower(),而不是file.name.startswith(前缀)
用法:

root\u dir=Path(r'C:\abc')
sub_dirs=[f表示根_dir.iterdir()中的f,如果f.是_dir()]
#循环遍历所有子目录,并使用它们自己的基本文件夹对每个子目录进行评估
对于子目录中的目标目录:
无效的\u文件=从(目标\u目录)获取\u无效的\u文件
如果文件无效:
打印('测试失败!无效文件路径:')
打印('\n'.join(无效的\u文件))
其他:
打印('测试通过')

输出应该是什么?您自己尝试过什么吗?您可以使用来进行此操作。@theletz如果条件满足,则测试用例通过&如果不满足,则打印不包含文件夹名称的.json和.png名称作为前缀,请更新问题本身,以澄清您在示例中实际查找的内容。我想检查.png和.json是否包含前缀“vito”代码运行成功,但我手动将文件前缀从vito.png更改为a.png,但它没有打印不匹配的png文件的名称。vito.json to也是如此。此解决方案仅创建有效文件名的列表。它不确定是否存在问题中指定的任何无效png/json文件名(请参见注释)@DV82XL您能帮我解决这个问题吗?请将文件“C:/Users/rdwivedi/AppData/Roaming/JetBrains/PyCharmCE2020.1/scratch/scratch.py”,第7行start_with_folder_name=[f in files if f.startswith(folder)]^SyntaxError:无效syntax@winx抱歉,输入错误,已修复,再试一次此解决方案不解决中指定的png或json文件类型question@winx您可能需要检查关于json/png文件对的问题:@DV82XL已被寻址:此代码工作正常&显示主目录“E:\abc\vito”中的无效文件但这无法遍历主目录“E:\abc\vito”中的子目录。虽然我把['***.png','***.json']放在了['.png','.json']的位置上。它也不会发布存在不匹配png和json的目录。@winx要获取完整路径,只需调用f.absolute()而不是f.name。要递归遍历dir,需要使用glob()而不是iterdir()。我在答案中做了更改。结果发现你甚至不需要调用f.absolute()。。。只需str(f)就足以获得完整的绝对路径。@winx如果此回答回答了您的问题,请向上投票并选择作为正确答案。谢谢为什么要使用
断言
?if语句仍会打印无效文件而不会引发错误。