我想询问包含子文件夹的主文件夹的目录,每个子文件夹在ASTIK.shp
子文件夹中包含ASTIK
,然后在{{1}中包含EAS.shp
}子文件夹,然后是EAS
等
ASTOM.shp
表示与此代码进行交集,在这种情况下,该代码应包含INT
和ASTIK
shapefile。
例如一行:
EAS
暗示:
INT_ASTIK_EAS
然后转到另一行并“抓住”该行的含义,并在两个命名的shapefile之间执行擦除(差异)操作。
如果文件名前面有“ ER”,例如:
import geopandas
inte_s=gpd.overlay(ASTIK,EAS,how='intersection')
它应该执行:
ER_ASTOM_ASTIK
然后找到确切的文件并执行。我如何做到这一点而又不作很多条件和逐行处理:像
er=gpd.overlay(ASTOM,ASTIK,how='difference')
这将找到用户提供的路径中通常具有shps的目录:
directory=input('Insert dir of the main folder')
txtfile=open(input()) #insert directory of txt
x = txtfile.readlines()
txtfile.close()
这将导致如下操作:
import os
import fiona
rootdir = r'C:\Users\user\Desktop\a' # path to your root directory you walk
sfiles = {} # a dictionary with all the .shp files
for entry in os.listdir(rootdir):
dirpath = os.path.join(rootdir, entry)
if os.path.isdir(dirpath):
for file in os.listdir(dirpath): # Get all files in the subdirectories
if file.endswith('.shp'): # If it's an .shp.
filepath = os.path.join(dirpath, file)
sfiles[filepath[:-4]] = fiona.open(filepath)
然后:
action_dict = {'INT': 'intersection', 'ER': 'difference'}
到目前为止,这是代码,它可以使您了解过程是什么。
很有可能是txt中提到的文件丢失了,它要求例外并声明该特定文件丢失了。现在的问题是,如何使它遍历txt文件的每一行,就像这样:
directory=input('Insert dir of the main folder')
with open(input()) as txtfile: #insert directory of txt
x = txtfile.readlines()
for line in x:
action, shape1, shape2 = line.split('_') # here line is ER_ASTOM_ASTIK or whatever line in your txt file
if shape1 in sfiles and shape2 in sfiles:
gpd.overlay(sfiles[shape1], sfiles[shape2], how=action_dict[action])
它可能不会执行相交或相差。我无法确认。我该如何将其结果存储在变量中,因为我必须对每一行的每个操作的结果进行进一步处理。有没有比将每个结果存储到变量中更好的方法了?