通过正在处理的文件使文本文件的内容与迭代通信,

时间:2018-06-27 13:35:26

标签: python

我想询问包含子文件夹的主文件夹的目录,每个子文件夹在ASTIK.shp子文件夹中包含ASTIK,然后在{{1}中包含EAS.shp }子文件夹,然后是EAS

ASTOM.shp表示与此代码进行交集,在这种情况下,该代码应包含INTASTIK 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])

它可能不会执行相交或相差。我无法确认。我该如何将其结果存储在变量中,因为我必须对每一行的每个操作的结果进行进一步处理。有没有比将每个结果存储到变量中更好的方法了?

0 个答案:

没有答案