os.rename不工作

时间:2018-05-23 23:32:09

标签: python operating-system rename

我尝试重命名文件。不希望文件以" __"开头。尝试使用帖子中的代码: 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 个答案:

答案 0 :(得分:1)

您应该给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)

答案 1 :(得分:1)

这是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

答案 2 :(得分:0)

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

os.rename(os.path.join(r"S:\Shared\Santa Rosa", x), os.path.join(r"S:\Shared\Santa Rosa", x.replace("__", ""))

答案 3 :(得分:0)

使用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('__', ''))