如何通过脚本提取,重命名和移动文件

时间:2014-06-27 22:12:10

标签: arcpy shapefile automation

我是Python的初学者,所以这个问题真是令人生畏。我正在使用ArcGIS 10.2和Python 2.7

我有大约3,000个zip文件(Winzip),每个文件包含四个描述不同矢量特征的shapefile。这些shapefile在每个zip文件中具有相同的四个相同名称。它们本质上是一个时间序列,将相同的四个数据集分解为各个日期。

zip文件的名称在我需要检索的名称中间的某处包含一个字符串,并包含在提取的shapefile的名称中。

然后我需要根据类型将每个重命名的shapefile移动到不同的目录。

例如:

 usdm_20001001.zip (I need the 20001001 from the title)
    |--DI_Callout.shp (needs to be renamed C20001001 and moved to a directory = Callout)
    |--DI_Type.shp (needs to be renamed T20001001 and moved to a directory = Type)
    |--file three
    |--file four

等等,3000次。

1 个答案:

答案 0 :(得分:3)

Python有一个Zip interface。我已经整理了一个包含您需要的所有部分的小脚本,但您需要使用名称和路径进行查找或转换;您的问题中没有足够的信息来决定名称,我无法关注您的文件夹结构。

import sys, os, zipfile

InFolder = sys.argv[1]

for Zfile in os.listdir(InFolder + "\*.zip"):
    # Open the archive
    Archive = zipfile.ZipFile(InFolder + "\\" + Zfile)
    # get the base name (no extension) and split it
    # to exract the ID.
    Zname, Zext = os.splitext(Zfile)
    Zsplit = Zname.split("_")
    BaseName = "C%s" % Zsplit[1]

    ZDir = InFolder + "\\" + BaseName

    # If the folder doesn't exist create it
    if not os.path.exists(ZDir):
        os.mkdir(ZDir)

    # setp through each file in the archive
    # extracting each one as you go.
    for member in Archive.infolist():
        InName, InExt = os.splitext(member.filename)
        # Not sure about naming here, you will need to do
        # some string manipulation
        OutFileName = "NotSure" + InExt

        # not sure about extract with a diffent name
        # so extract and rename
        Archive.extract(member,ZDir)
        os.rename(ZDir + "\\" + member.filename, ZDir + "\\" + OutFileName)

所有的部分都在那里:分裂字符串,使用zip文件,测试&创建文件夹,重命名文件和从扩展名中拆分文件名。以此为基础,您应该顺利完成。