我很难为包含不同光栅数据的多个不同zip文件夹创建许多不同的目录,然后在一个干净的脚本中将所有的zip解压到新文件夹中。在
我已经完成了我的任务,我的代码很长很乱。我需要有标记为NE34_E
,NE35_E
等的文件夹,然后在这些目录中,我需要子文件夹,如N34_24
,N34_25
等,光栅数据将被提取到这些子文件夹中。我有超过100个zip文件,需要提取和放在子文件夹。在
在对我创建目录的方式做了一些更改之后,这是我的脚本的一个示例。在
我的文件结构如下:
N\\N36_E\\N36_24 N\\N36_E\\N35_25 ... etc.
Zipfile名称:
n36_e024_1arc_v3_bil.zip n36_e025_1arc_v3_bil.zip n36_e026_1arc_v3_bil.zip ... etc.
创建目录结构的Python代码:
import os
#Create Sub directories for "NE36_"
pathname1 = "NE36_"
pathname2 = 24
directory = "D:\\Capstone\\Test\\N36_E\\" + str(pathname1) + str(pathname2)
while pathname2 < 46:
if not os.path.exists(directory):
os.makedirs(directory)
pathname2 += 1
directory = "D:\\Capstone\\Test\\N36_E\\" + str(pathname1) + str(pathname2)
#Create Sub directories for "NE37_"
pathname1 = "NE37_"
pathname2 = 24
directory = "D:\\Capstone\\Test\\N37_E\\" + str(pathname1) + str(pathname2)
while pathname2 < 46:
if not os.path.exists(directory):
os.makedirs(directory)
pathname2 += 1
directory = "D:\\Capstone\\Test\\N37_E\\" + str(pathname1) + str(pathname2)
设置值的2个主要设置是:
zipfile_rootdir
是zip文件所在的位置。在extract_rootdir
是提取到的位置。在字符串被视为原始字符串之前的
r
, 所以不需要反斜杠转义。在一个正则表达式被编译并用于提取 用于的zip文件名中的文本 提取路径。在
从zip文件:
使用正则表达式提取部件序列:
每个条目都大写,并用于创建词典 名为
folders
,包含键和值:extract_path
将通过连接存储完整路径extract_rootdir
与folder['outer']
和{最后,通过使用
with
使用上下文管理器,将提取zip文件。在正则表达式:
^{pr2}$以前正则表达式模式的编译 循环是为了避免模式的多次编译 在循环中。 在字符串之前使用
r
来通知Python 字符串应该被解释为原始的 i、 没有反斜杠转义。 原始字符串对于正则表达式很有用,例如 反斜杠转义用于模式。在正则表达式模式:
正则表达式要处理的字符串:
\A
只在字符串的开头匹配。 这是一个锚,与任何字符都不匹配。在([a-zA-Z])
匹配任何字母字符。[]
与其中的任何字符匹配。 介于a
到z
和之间的任何字符A
到{n
将匹配。 封闭的()
是组捕获到的存储区 返回的序列。所以序列现在是n,
。在(\d+)
匹配1位或更多。\d
是任意数字 并且+
告诉它继续匹配更多。 序列变成n, 36,
。在_
是文本,由于()
没有将其括起来,因此它 匹配,但未添加到序列中。在([a-zA-Z])
与点2相同。 序列变成n, 36, e,
。在0{0,2}
匹配一个零0
,0到2倍{0,2}
。 否()
,因此没有添加到序列中。在(\d+)
与点3相同。 序列变成n, 36, e, 24
。在\A
是 用于使图案不能从任何地方开始 转到不需要的字符串的末尾。在格式:
序列被大写后是
N, 36, E, 24
通过列表理解。在{0}{1}_{2}
是有序的0, 1, 2
, 所以0是N
,1是36
,2是{N36_E
。_
是模式中的字面意思。在{0}{2}{1}_{3}
是有序的0, 2, 1, 3
。0是N
,2是E
,1是36
3是24
变成{参考文献:
Python 2:
Python 3:
相关问题 更多 >
编程相关推荐