Папка A
имеет подпапки B,C,D
, которые содержат новые «рассматриваемые» файлы. Есть также другая подобная папка с похожими подпапками, в которой есть действительные соответствующие файлы.
Все эти подпапки содержат одинаковые типы файлов. Мне нужно создать программу, которая открывает эти папки и сначала читает определенный файл .shp
(в каждой подпапке существует только один .shp
, B,C,D
) и делает некоторые процедуры, которые я уже решил. Проблема только в том, как сделать начальную вещь, которую я описал.
я попробовал библиотеку glob:
from glob import glob
glob("directory/*/")
, которая теперь предоставляет подкаталоги главной папки. Но я не знаю, полезно ли это для процесса.
Чтобы прочитать эти shp
файлы, которые я использую
import fiona
d1 = fiona.open('hxc.shp)
поэтому код:
import os
import fiona
new=input('Select directory of new folder: ')
old=input('Select directory of old folder: ')
for root, dirs, files in os.walk(DIRECTORY\Desktop\a'):
for name in files:
if name.endswith((".shp")):
d1= fiona.open(os.path.join(root, name))
Эта последняя часть не читает все подпапки в этой главной папке, каждая из которых содержит shp. Он просто назначает один .shp
файл. Я хочу прочитать каждую подпапку с расширением shp
и назначить ее новой переменной.
Рабочий код для передачи в список каждой shp из каждого каталога:
UPDATE $$$$$$$$$$$$$$$$$$$$$$$$$$
rootdir = r'C:\Users\user\Desktop\a' # path to your root directory you walk
sfiles = [] # a list 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.append(fiona.open(filepath))
Основная задача следующая:
Одна основная папка A с подпапками B, C, D .... В этой основной папке находятся новые рассматриваемых файлов. Большинство подпапок имеют shps.
Хотя есть еще одна основная папка. Давайте назовем его K с подпапками L, M, N .. Эти подпапки являются соответствующими из других подпапок другой папки с новыми файлами.
Я хочу, чтобы пользователь вставил каталог главной папки A
и прочитал первую shp из первой подпапки (если она там есть), затем перейдите в другую основную папку old
и проверьте соответствующую подпапку получите shp
оттуда и сделайте несколько сравнений между ними и напечатайте результаты (выделенные курсивом части, которые я уже решил), а затем продолжите работу с остальными подпапками папки new
соответственно. в одной подпапке нет shp, он должен напечатать: у 'имя папки' нет shp. и продолжить с остальными.
Как мне это сделать?
Когда мне добавить эту комбинацию между каждой частью shapefiles.schema?
если бы шейп-файлы были вставлены вручную, я бы сделал это так:
pst_n=fiona.open(r'C:\Users\user\Desktop\new\PST')#new pst
pst_o=fiona.open(r'C:\Users\user\Desktop\old\PST')#old_pst
pst_n.schema
d1 = pst_n.schema['properties']
d2 = pst_o.schema['properties']
d1_items = set(d1.items())
d2_items = set(d2.items())
result = sorted([(k, 'd1', v) for k, v in d1_items if (k, v) not in d2_items] +
[(k, 'd2', v) for k, v in d2_items if (k, v) not in d1_items])
result = [(k, v, d) for k, d, v in result]
pprint(result)
и показывает такие различия:
[('ADDRESS', 'int:4', 'd1'),
('ADDRESS', 'str:254', 'd2'),
('AREA', 'float:19.11', 'd2'),
('DEC_ID', 'int:4', 'd1'),
('DEC_ID', 'str:254', 'd2'),
('DESC_', 'str:254', 'd1'),
('FID_PERIVL', 'int:9', 'd1'),
('KAEK', 'str:50', 'd1'),
('KAEK', 'str:12', 'd2'),
('LEN', 'float:19.11', 'd2'),
Теперь, как я должен показать различия каждой комбинации, когда она зацикливается?