使用不断更改的名称重命名目录
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")
我创建了一个脚本来下载一些数据,然后 运行 一些进程。数据源(即 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")