читать несколько файлов с одинаковым именем, но с разным расширением Python

1

я пытаюсь читать и записывать файлы из папки с одинаковыми именами, НО разные расширения => извлекать данные из них => переписывать. Вот мой код:

for header_name in glob.glob(os.path.join(folder_path, "*.json")):
    for nii_name in glob.glob(os.path.join(folder_path, "*.nii")):
        with open(header_name, "r") as f:
        nii_meta = json.load(f)
        add_stc = slicetime(header_name).tolist()
        nii_meta["SliceTiming"] = add_stc
    with open(header_name, 'w') as f:
        json.dump(nii_meta, f, indent=2)

я попытался проверить:

    h_name = os.path.splitext(os.path.basename(header_name))[0]
    n_name = os.path.splitext(os.path.basename(nii_name))[0]
    if h_name == n_name:
        do smth with data form files

но без succes Имена файлов: sub01_T1w.json, sub01_T1w.nii.gz, sub01_T1w1.json, sub01_T1w1.nii.gz...

  • 0
    Как называются файлы? Должно ли быть разрешено абсолютно любое расширение файла?
  • 0
    Добавлено в вопрос.
Теги:
nifti

1 ответ

0

Я бы предложил работать с pathlib, его относительно новой частью стандартной библиотеки python, что упростило работу с путями и файлами. Решение, использующее его, может выглядеть так:

from pathlib import Path

p = Path('parent/folder/of/my/files')
json_names = {f.stem for f in p.iterdir() if f.suffix == '.json'}
nii_names = {Path(f.stem).stem for f in p.iterdir() if f.suffixes == ['.nii', '.gz']}
for file_name in json_names & nii_names:
    json_path = p / (file_name + '.json')
    nii_path = p / (file_name + '.nii.gz')
    with open(json_path) as json_file, open(nii_path) as nii_file:
        ...  # do things with the files' contents

Если вы хотите написать им, не забудьте повторно открыть цель с open(json_path, 'w') после выхода из режима "только для чтения" with -block.

  • 0
    Здравствуйте @Arne, спасибо за решение, но для nii_names с ['.nii', '.gz'] это не работает. Тип (nii_names) = set {}, не знаю, что с этим делать
  • 0
    Эй, @Relyativist, у меня была ошибка там. Я забыл, что stem удаляет суффикс только один раз, поэтому его нужно вызывать дважды для имени файла с двумя суффиксами, например, nii.gz Это работает сейчас?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню