Я ищу файлы в пути, но некоторые вложенные папки пустые. Поэтому следует использовать исключение.
Если происходит столкновение с пустой папкой, эта ошибка возникает.
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. Исправьте ошибку, которая не распознается в исключении.
Вы должны импортировать эту ошибку - также см. Документы:
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')
1.Print the name of the folder and subfolder that is empty. and check if it is empty