Сообщить, когда папка пуста в Python?

1

Я ищу файлы в пути, но некоторые вложенные папки пустые. Поэтому следует использовать исключение.

Если происходит столкновение с пустой папкой, эта ошибка возникает.

FionaValueError: Нет набора данных, найденного по пути '/Users\user\Desktop\testn\43003\CBOUND' с использованием драйверов: *

Поэтому я сделал исключение для этой ошибки:

folder = Path(r"C:\Users\user\Desktop\testn")
shapefiles =glob('/*/*/Desktop/testn/*/*')
#shapefiles =glob('/*/*/Desktop/testm/*/*,recursive = True')

shapefiles
try:
    gdf = pandas.concat([
    geopandas.read_file(shp)
    for shp in shapefiles
    ],sort=True).pipe(geopandas.GeoDataFrame)
    gdf.to_file(folder / 'compiled.shp')
except FionaValueError as ex:
    if shp==[]: #if subfolder is empty print name of folder and subfolder is empty
        print(shp + 'is empty')

и дает

NameError: name 'FionaValueError' is not defined

Так что мне нужно:

1. Распечатайте имя папки и подпапки, которая пуста

2. Исправьте ошибку, которая не распознается в исключении.

  • 1
    Вам необходимо импортировать FionaValueError оттуда, где он определен.
  • 0
    Вы также можете проверить, если папка пуста, прежде чем работать с ней. Это можно сделать с помощью os.listdir ( docs.python.org/3/library/os.html ).
Теги:
exception

1 ответ

1
Лучший ответ

Вы должны импортировать эту ошибку - также см. Документы:

from fiona.errors import FionaValueError

Чтобы проверить, является ли папка пустой, вы можете использовать шаблон как:

if not os.listdir(path):
    print(f'{path} is empty')

Чтобы напечатать фактические пустые пути, вы можете переписать понимание списка в стандартный цикл:

from fiona.errors import FionaValueError
import os
import glob
import geopandas as gpd
import pandas as pd 
import path

folder = path.Path(r"C:\Users\user\Desktop\testn")
shapefiles = []
for shpfile in glob.iglob('/*/*/Desktop/testn/*/*'):
    try:
        shapefiles.append(geopandas.read_file(shpfile))
    except FionaValueError as ex:
        if not os.listdir(shpfile):
            print(f'{shpfile} is empty')

gdf = pd.concat(shapefiles, sort=True).pipe(gpd.GeoDataFrame)
gdf.to_file(folder / 'compiled.shp')
  • 0
    Вы также можете помочь с первым подвопросом? 1.Print the name of the folder and subfolder that is empty. and check if it is empty
  • 0
    Да, но как насчет использования его в цикле, который у меня есть, и через глобальный процесс? Проверьте код, который я разместил, чтобы увидеть конкретный случай.
Показать ещё 6 комментариев

Ещё вопросы

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