簡體   English   中英

遍歷子文件夾並在 Python 中保存到.csv

[英]Loop through sub-folder and save to .csv in Python

我有一個名為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)"   

但是,我想編寫一個代碼來遍歷子文件夾並將 5 個圖像中的每一個保存到一個.csv文件中。 例如,如果我有參與者1 ,我想要一個包含來自Folder1的圖像的.csv文件,如果我有參與者2 ,我想要一個包含來自Folder2的圖像的.csv文件,依此類推。

我想我可能需要創建一個空列表,然后保存到一個.csv文件,如下所示:

lst = []

cols = ['participant', 'imagefile']

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

任何幫助將非常感激!

這是 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])

使用以下代碼將子文件夾中的每個 jpg 文件名獲取到 csv 文件。

import csv
import os
import glob

root_folder = '/path/to/root_folder'
out_csv_name = '/path/to/out.csv'
dir_list = os.listdir(root_folder)

filename_list = []

for each_dir in dir_list:

    with open(out_csv_name, mode='a') as crop_file_name:

        csvwriter = csv.writer(crop_file_name, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

        for image in glob.glob(os.path.join(root_folder,each_dir+"/*.jpg")):

            csvwriter.writerow([os.path.basename(image)])
            filename_list.append(os.path.basename(image))

print(len(filename_list))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM