微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用不断变化的名称重命名目录

如何解决用不断变化的名称重命名目录

我创建了一个脚本,用于下载一些数据,然后运行一些进程。数据源(即 ArcGIS Online)始终将数据下载为 zip 文件提取文件名称将是一系列字母和数字。我注意到这些偶尔会改变(不完全确定为什么)。我的想法是运行 os.listdir 来获取文件名称然后重命名它。我遇到的问题是该列表返回带括号和引号的文件名称。它返回 ['f29a52b8908242f5b1f32c58b74c063b.gdb'] 作为文件名称,而文件资源管理器中的文件夹没有括号和引号。下面是我的代码和我收到的错误

from zipfile import ZipFile

file_name = "THDNuclearFacilitiesBaseSandBoxData.zip"

with ZipFile(file_name) as zip:
    # unzipping all the files
    print("Unzipping "+ file_name)
    zip.extractall("C:/NAPSG/PROJECTS/DHS/THD_Nuclear_Facilities/SCRIPT/CountyDownload/Data")

    print('Unzip Complete')

#removes old zip file
os.remove(file_name)


x = os.listdir("C:/NAPSG/PROJECTS/DHS/THD_Nuclear_Facilities/SCRIPT/CountyDownload/Data")
os.renames(str(x),"Test.gdb")

输出

FileNotFoundError: [WinError 2] 系统找不到指定的文件:“['f29a52b8908242f5b1f32c58b74c063b.gdb']” -> 'Test.gdb'

我对 python 脚本比较陌生,所以如果有更简单的替代方案,那也很棒。谢谢!

解决方法

方括号表示列表。尝试 x[0] 应该去掉括号而只是数据。 listdir 返回的可能是一个只有一个值的列表,也可能是一整串

,

os.listdir() 返回文件夹中的列表文件/对象。

lists 在打印到屏幕时使用一组括号表示。 每个文件的名称是一个 string 字符,strings 在打印到屏幕时使用引号表示。

所以我们看到一个带有单个文件名的 list

['f29a52b8908242f5b1f32c58b74c063b.gdb']

要使用 Python 访问 list 中的项目,您可以使用索引表示法(碰巧还使用方括号告诉 Python 通过引用 list 的索引或数量来使用 list 中的哪个项目)项目。

Python list 索引从零开始,因此要获取第一个(在本例中为 x[0] 中的唯一项目),您可以使用 x = os.listdir("C:/NAPSG/PROJECTS/DHS/THD_Nuclear_Facilities/SCRIPT/CountyDownload/Data") os.renames(x[0],"Test.gdb")

x

话虽如此,在这种情况下,我通常不会使用 files = os.listdir("C:/NAPSG/PROJECTS/DHS/THD_Nuclear_Facilities/SCRIPT/CountyDownload/Data") os.renames(files[0],"Test.gdb") 作为变量名...我可能会以不同的方式编写代码:

{{1}}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。