代码之家  ›  专栏  ›  技术社区  ›  geoJshaun

os.rename不工作

  •  2
  • geoJshaun  · 技术社区  · 8 年前

    我尝试重命名文件。不希望文件以“uuuu”开头。尝试使用Post中的代码: Removing characters from filename in batch

    制作列表时:

    myDir = os.listdir(r"S:\Shared\Santa Rosa")
    for x in myDir:
      ...
    

    我得到这个输出:

    Tuesday
    Wednesday
    __1831.pdf
    __1832.pdf
    __1833.pdf
    __1834.pdf
    __1841.pdf
    __1842.pdf
    __1843.pdf
    __1844.pdf
    __1851.pdf
    __1852.pdf
    __1853.pdf
    __1854.pdf
    __1861.pdf
    __1862.pdf
    

    但什么时候这样做:

    for x in myDir:
        os.rename(x, x.replace('__', ''))
    

    我得到错误:

    Traceback (most recent call last):
      File "<interactive input>", line 2, in <module>
    WindowsError: [Error 2] The system cannot find the file specified
    
    4 回复  |  直到 8 年前
        1
  •  1
  •   Joseph Sheedy    8 年前

    您应该为os.rename提供完整的路径名,例如

    dirName = r"S:\Shared\Santa Rosa"
    myDir = os.listdir(dirName)
    for x in myDir:
        oldName = os.path.join(dirName, x)
        newName = os.path.join(dirName, x.replace('__', ''))
        os.rename(oldName, newName)
    
        2
  •  1
  •   tdelaney    8 年前

    这是一份工作 glob . 使用它来过滤文件名。因为它返回了一个可用的路径,所以您不需要 os.path.join .

    >>> from glob import glob
    >>> import os
    >>> for fn in glob("tmp/__*.pdf"):
    ...     print(fn)
    ...     os.rename(fn, fn.replace("__", ""))
    ... 
    tmp/__aaa.pdf
    tmp/__bbb.pdf
    
        3
  •  0
  •   Barmar    8 年前

    os.rename() 需要文件的完整路径:

    os.rename(os.path.join(r"S:\Shared\Santa Rosa", x), os.path.join(r"S:\Shared\Santa Rosa", x.replace("__", ""))
    
        4
  •  0
  •   merlin2011    8 年前

    使用 os.path.join 获得完整的路径。

    dirPath = r"S:\Shared\Santa Rosa"
    myDir = os.listdir(dirPath)
    for x in myDir:
       x = os.path.join(myDir, x)
       os.rename(x, x.replace('__', ''))
    
    推荐文章