使用不断更改的名称重命名目录

Rename directory with constantly changing name

我创建了一个脚本来下载一些数据,然后 运行 一些进程。数据源(即 ArcGIS Online)始终将数据下载为 zip 文件,解压缩后文件夹名称将是一系列字母和数字。我注意到这些偶尔会发生变化(不完全确定为什么)。我的想法是 运行 和 os.listdir 获取文件夹名称然后重命名。我 运行 遇到问题的地方是列表 returns 带括号和引号的文件夹名称。它 returns 作为 ['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 的 return 可能是一个只有一个值或一整串值的列表

os.listdir() returns 文件夹中的列表 files/objects。

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

所以我们看到 list 只有一个文件名:

['f29a52b8908242f5b1f32c58b74c063b.gdb']

要使用 Python 访问 list 中的项目,您可以使用索引符号(恰好也使用括号来告诉 Python [=17= 中的哪个项目] 通过引用项目的索引或编号来使用。

Python list 索引从零开始,因此要获取第一个(在本例中是 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")