Сравните несколько имен файлов с префиксом имени в том же каталоге - PullRequest
0 голосов
/ 28 мая 2020

У меня есть несколько файлов .png и. json в одном каталоге. И я хочу проверить, где файлы, доступные в каталоге, имеют одно и то же имя или не такие как a.png и a. json, b.png и b. json

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Вы можете попробовать это:

import os

_, _ ,files = os.walk('.').next()
json = [f[:-5] for f in files if f.endswith('.json')]
png  = [f[:-4] for f in files if f.endswith('.png')]

json_only = set(json) - set(png)
png_only = set(png) - set(json)

json_and_png = set(json) & set(png)

... etc...
0 голосов
/ 16 июня 2020
from pathlib import Path
print("TEST CASE::NAMING CONVENTIONS SHOULD BE START WITH GAME PREFIX ")
def get_invalid_files_from(directory: str) -> []:
    dir_path = Path(r"E:\abc\\xyz")
    parent_folder = dir_path.stem
    files = dir_path.rglob('*')
    return [str(f) for f in files if is_file_invalid(f, prefix=parent_folder)]

def is_file_invalid(file: Path, prefix: str) -> bool:
    return file.suffix.lower() in ['.png', '.json'] and not file.name.startswith(prefix)
testcase = True
invalid_files = get_invalid_files_from(r'E:\abc\\xyz')
#assert not invalid_files, 'Invalid file paths:\n' + '\n'.join(invalid_files)

if invalid_files :
    testcase = False
    print(r'Below given File found with invalid prefix:')
    print('\n'.join(invalid_files))
if not testcase:
    print("test case failed ")
else:
    print("Test Case Passed ")
0 голосов
/ 13 июня 2020

@ lenik на правильном пути, я считаю, что использование наборов - самый простой способ получить то, что вы хотите. Вот полное и проверенное решение с использованием модуля pathlib, в котором перечислены все файлы png / json, для которых нет подходящей пары в предоставленной папке и во всех подпапках:

def get_unpaired_files(directory: str) -> []:
    dir_path = Path(directory).resolve()
    json_files = get_files_without_extension(dir_path, pattern='*.json')
    png_files = get_files_without_extension(dir_path, pattern='*.png')
    return [str(f) for f in set(json_files) ^ set(png_files)]

def get_files_without_extension(dir_path: Path, pattern: str) -> []:
    return [f.with_suffix('') for f in dir_path.rglob(pattern)]

Использование:

unpaired_files = get_unpaired_files(r'E:\abc')

if unpaired_files :
    print('Unpaired file paths were found:')
    print('\n'.join(unpaired_files))
...