L oop через подпапку и сохранить в .csv в Python - PullRequest
1 голос
/ 22 января 2020

У меня есть папка с именем Folder, структурированная так:

Folder/
├── Folder1
│   ├── image1.jpg
│   ├── image2.jpg
│   ├── image3.jpg
│   ├── image4.jpg
│   └── image5.jpg
├── Folder2
│   ├── image1.jpg
│   ├── image2.jpg
│   ├── image3.jpg
│   ├── image4.jpg
│   └── image5.jpg
├── Folder3
│   ├── image1.jpg
│   ├── image2.jpg
│   ├── image3.jpg
│   ├── image4.jpg
│   └── image5.jpg
└── Folder4
    ├── image1.jpg
    ├── image2.jpg
    ├── image3.jpg
    ├── image4.jpg
    └── image5.jpg

У меня есть код, который печатает папки вместе с изображениями в каждой папке.

rootDir = '.'
for dirName, subdirList, fileList in os.walk(rootDir):
    print('Found directory: %s' % dirName)
    for fname in fileList:
        print('\t%s' % fname)"   

Однако Я хочу написать код для l oop через подпапки и сохранить каждое из 5 изображений в файл .csv. Например, если у меня есть участник 1, я хочу файл .csv, содержащий изображения из Folder1, если у меня есть участник 2, я хочу файл .csv, содержащий изображения из Folder2, и так далее.

Я думаю, мне может понадобиться создать пустой список, а затем сохранить его в .csv файле, как показано ниже:

lst = []

cols = ['participant', 'imagefile']

pd.DataFrame(lst,columns=cols).to_csv('imagefiles.csv', index=False)

Любая помощь будет очень признательна!

1 Ответ

0 голосов
/ 22 января 2020

Вот возможное решение в Python 3,6+ (3,4+ из-за pathlib и 3,6+ из-за f-strings):

from pathlib import Path
import csv


folder = Path('/path/to/main/Folder'):
csvdir = Path('/path/to/store/csv/files')
participants = [1, 2, 3, 4]
headers = ['participant', 'imagefile']

for participant in participants:
    participant_folder = folder / f'Folder{participant}'

    # Do we have a Folder for participant number? 
    if participant_folder.is_dir():
        # create a csv file in csvdir for participant
        with Path(csvdir / f'imagefiles{participant}.csv').open('w') as f:
            csvwriter = csv.writer(f, quote=csv.QUOTEALL)

            cswriter.writerow(headers)

            for image in participant_folder.glob('*.jpg'):
                csvwriter.writerow([participant, image])

...