gpt4 book ai didi

python - 输入主文件夹的每个子文件夹并从每个子文件夹中读取某种文件类型?

转载 作者:太空宇宙 更新时间:2023-11-04 04:39:13 24 4
gpt4 key购买 nike

文件夹 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 传入列表的工作代码是这样的:

更新$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

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(如果它存在一个 shp)然后转到另一个 old 主文件夹并检查相应的子文件夹,从那里获取 shp 并在它们之间进行一些比较并打印结果(斜体部分我已经解决了)然后相应地继续 new 文件夹的其余子文件夹。如果在一个子文件夹中没有 shp,它应该打印:'folder name' has no shp。并继续剩下的。

我应该怎么做?


我什么时候应该在每个 shapefiles.schema 片段之间添加这个组合?如果 shapefile 是手动插入的,我会这样做:

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'),

现在我应该如何在循环时显示每个组合的差异?

最佳答案

与其将文件流分配给固定变量 d1,不如将它们分配给由路径名索引的字典。

file = {}
for root, dirs, files in os.walk('DIRECTORY\Desktop\a'):
for name in files:
if name.endswith(".shp"):
path = os.path.join(root, name)
file[path] = fiona.open(path)

关于python - 输入主文件夹的每个子文件夹并从每个子文件夹中读取某种文件类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51037299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com