我想调整一个函数,读取一个特定文件夹中的多个shapefile,以读取多个文件夹中的多个shapefile。
下面是读取一个文件夹中的多个shapefile的函数。
def import_shapes_list(path_to_data:str,shapes_folder:str,crs:str,current_crs:str) ->gpd.GeoDataFrame:
"""
"""
files = glob.iglob(path_+'*.shp')
gdfs = []
for file in files:
print(file)
gdf = read_gdf(file,crs,current_crs=current_crs)
gdf.columns = map(str.lower, gdf.columns)
gdfs.append(gdf)
geomap = gpd.GeoDataFrame( pd.concat( gdfs, ignore_index=True) )
return geomap
geomap_nord=import_shapes_list(path_to_data=path_to_data,shapes_folder=shapes_folder_nord, crs='EPSG:4326',current_crs='EPSG:26191')
The output is this:
./Source data/...../shapefile1.shp
./Source data/...../shapefile2.shp
./Source data/...../shapefile3.shp
我已经试着调整它,使它通过多个文件夹循环。以下是我尝试过的:
import os
path_to_data = './Source data/'
rootdir = path_to_data + '...2021/'
files = glob.iglob(rootdir+'*.shp')
gdfs = []
for subdir, dirs, files in os.walk(rootdir):
for file in files:
print(os.path.join(subdir, file))
输出为:
folder1/xxxx.cpg
folder1/xxxx.dbf
folder1/xxxx.prj
folder1/xxxx.qmd
folder1/xxxx.shp
folder1/xxxx.shx
folder2/yyyy.cpg
folder2/yyyy.dbf
folder2/yyyy.prj
folder2/yyyy.shp
我的问题是,当它应该只阅读shapefile(.shp
)时,它读取了每个文件夹中的所有内容。
我如何调整上面的函数,使其读取每个文件夹中的shapefile?
2条答案
按热度按时间kkbh8khc1#
我创造了这个作品。
代码可以工作并读取每个文件夹,但是否有更好的方法来编写它?我不认为这是最佳的,因为它需要很长的时间
qncylg1j2#
有人提出了以下答案:
除非你使用的是一个古老的Python版本,否则这应该是理想的: