Python WindowsError:[Error 3]系统在尝试重命名时找不到指定的文件

2024-09-29 03:25:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我搞不懂怎么了。我以前使用过rename,没有任何问题,在其他类似的问题中找不到解决方案。

import os
import random

directory = "C:\\whatever"
string = ""
alphabet = "abcdefghijklmnopqrstuvwxyz"


listDir = os.listdir(directory)

for item in listDir:
    path = os.path.join(directory, item)

    for x in random.sample(alphabet, random.randint(5,15)):
        string += x

    string += path[-4:] #adds file extension

    os.rename(path, string)
    string= ""

Tags: pathinimportforstringosrandom解决方案
2条回答

如果要保存回同一目录,则需要向“string”变量添加路径。目前它只是创建一个文件名,os.rename需要一个路径。

for item in listDir:
    path = os.path.join(directory, item)

    for x in random.sample(alphabet, random.randint(5,15)):
        string += x

    string += path[-4:] #adds file extension
    string = os.path.join(directory,string)

    os.rename(path, string)
    string= ""

你的代码中有一些奇怪的东西。例如,文件的源是完整路径,但要重命名的目标只是一个文件名,因此文件将显示在工作目录中的任何位置—这可能不是您想要的。

对于两个随机生成的相同文件名,您没有任何保护,因此您可以通过这种方式销毁一些数据。

试试这个,它可以帮助你发现任何问题。这将只重命名文件,并跳过子目录。

import os
import random
import string

directory = "C:\\whatever"
alphabet = string.ascii_lowercase

for item in os.listdir(directory):
  old_fn = os.path.join(directory, item)
  new_fn = ''.join(random.sample(alphabet, random.randint(5,15)))
  new_fn += os.path.splitext(old_fn)[1] #adds file extension
  if os.path.isfile(old_fn) and not os.path.exists(new_fn):
    os.rename(path, os.path.join(directory, new_fn))
  else:
    print 'error renaming {} -> {}'.format(old_fn, new_fn)

相关问题 更多 >