解压并重命名

Posted

技术标签:

【中文标题】解压并重命名【英文标题】:Unzip and Rename 【发布时间】:2017-10-25 03:25:33 【问题描述】:

我已经编写/拼凑了以下代码来编译链接列表并下载链接。这些链接以 .zip 存档的形式下载,每个存档都包含一个 .tif 图像,该图像需要被提取并命名为与父 zip 文件夹相同的名称。除了提取和重命名下面的 zip 文件夹部分之外,脚本的所有内容都可以正常工作

脚本仍在执行,但是当您查看输出时,.tif 位于正确的目录中,但尚未重命名。

让脚本重命名提取的 .tif 的正确方法是什么?

也欢迎任何其他改进建议

完整脚本

import pandas as pd
import urllib
import os
import zipfile

data = pd.read_csv('StateRaster.csv')
links = data.SCAN_URL
file_names = data.API_NUMBER +"_"+ data.TOOL
dir = data.FOLDER +"/"+ data.SECTION2
root='g:/Data/Wells'
n=0
e=0

for link, file_name,dir in zip(links, file_names,dir):
    try:
        u = urllib.request.urlopen(link)
        udata = u.read()
        os.makedirs(os.path.join(root,dir), exist_ok=True)
        f = open(os.path.join(root,dir,file_name+".zip"), "wb+")
        f.write(udata)
        f.close()
        u.close()
        zip_ref = zipfile.ZipFile((os.path.join(root,dir,file_name+".zip")), 'r')
        #for filename in (os.path.join(root,dir,file_name+".zip")):
        zip_ref.extractall((os.path.join(root, dir)))
        for filename in ((os.path.join(root,dir))):
            if filename.endswith(".tif"):
                os.makedirs(os.path.join(root,dir,file_name+".tif"), exist_ok=True)
                os.rename(filename,file_name+".tif")

        zip_ref.close()

        n += 1
        print ('Pass',n,'Fail',e,'Total',n+e)
    except:
        e+=1
        print ('Error-Pass',n,'Fail',e,'Total',n+e)
        print("Done!!!!!")

【问题讨论】:

您在内部 for 循环中迭代文件路径中的字符。 去掉后者的for循环? If filename.endswith("tif"): 会成功重命名吗? 使用for filename in ((os.path.join(root,dir))),看起来您正在尝试遍历目录中的文件,但您正在遍历路径root/dir 中的字符。尝试在循环中打印filename 【参考方案1】:

问题就在身边

    for filename in ((os.path.join(root,dir))):

没有必要把(()) 放在周围,这一行只是遍历字符。你需要os.walk 或者glob.glob 像这样:

    for filename in glob.glob(os.path.join(root, dir, "*.tif")):
         print(filename)

【讨论】:

以上是关于解压并重命名的主要内容,如果未能解决你的问题,请参考以下文章

怎样用asp实现,下载指定网址文件,并重命名后保存到本地服务器上?

复制重命名覆盖mod是啥意思?

bat脚本照片复制重命名?

java 把文件从一个目录,移动到另一目录并重命名。

外壳移动文件并重命名它们

移动文件并重命名