【问题标题】:Rename directory with constantly changing name使用不断更改的名称重命名目录
【发布时间】:2020-12-20 09:03:27
【问题描述】:

我创建了一个脚本,它应该下载一些数据,然后运行一些进程。数据源(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 脚本比较陌生,所以如果有更简单的替代方案,那也很好。谢谢!

【问题讨论】:

    标签: python arcpy


    【解决方案1】:

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

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

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

    ['f29a52b8908242f5b1f32c58b74c063b.gdb']
    

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

    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")
    

    【讨论】:

    • 谢谢!那效果很好。是的,我知道 x 是一个不好的变量名,只是有一些简单的测试。
    【解决方案2】:

    方括号表示一个列表。尝试 x[0] 应该摆脱括号并成为数据。 listdir 的返回可能是一个只有一个值的列表,也可能是一大堆

    【讨论】:

      猜你喜欢
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2015-04-18
      • 2019-01-23
      • 1970-01-01
      • 2015-01-09
      相关资源
      最近更新 更多