将文件移动到子目录时的os.rename路径错误

时间:2015-03-18 09:32:09

标签: python file-copying shutil

我是python和编码的新手。我花了很多时间来修复这个错误,但我无法弄清楚如何做到这一点。我有一个包含子文件夹的主文件夹,我想将文件从主文件夹移动到子文件夹。这应该由os.renameshutil.move轻松完成,但我无法解决此错误。下面是我正在使用的代码以及我得到的错误。

cdir=os.getcwd()
newdir=cdir+"\subfolder"
src=os.path.join(cdir, fname) 
dst=os.path.join(newdir, fname)
os.rename(src,dst)

错误在目录路径中显示双反斜杠,即

  

FileNotFoundError:[WinError 3]系统找不到指定的路径:' E:\\   夹\\ FNAME' - > ' E:\\文件夹的子文件夹\\ \\ FNAME'

正确的路径是单反斜杠。我使用的是Windows 8.1和python34。谁能帮我这个。我知道这个问题必须重复,但我无法理解我做错了什么。使用shutil.move

生成类似的错误

1 个答案:

答案 0 :(得分:2)

双反斜杠正常;它们不是错误的原因。 Python总是将字符串表示中的反斜杠加倍,以便您可以安全地将该值复制到Python解释器中并重现完整的字符串:

>>> print 'E:\\folder\\fname' 
E:\folder\fname
>>> 'E:\\folder\\fname' 
'E:\\folder\\fname'
>>> value = 'E:\\folder\\fname' 
>>> value
'E:\\folder\\fname'
>>> print value
E:\folder\fname

Python这样做是因为在转义序列中使用了单个反斜杠; '\n'是换行符,但'\\n'是反斜杠,字母为n

你的错误在别处;最有可能的是subfolder尚未创建; os.rename()shutil.move()不会为您创建父文件夹。

您可以使用os.makedirs() function确保创建路径中的所有文件夹:

newdir = os.path.abspath('subfolder')  # will use the current working directory
try:
    # ensure that it exists
    os.makedirs(newdir)
except OSError:
    pass  # it is already there
src = os.path.abspath(fname) 
dst = os.path.join(newdir, fname)
os.rename(src, dst)

您还需要确保在文件名或子文件夹定义中不小心使用单个反斜杠; \s不是有效的转义符,但其他 有效,可能会产生意外结果。将定义路径的字符串中的反斜杠加倍,或使用原始字符串文字,或使用正斜杠代替:

>>> '\new'  # newline!
'\new'
>>> print '\new'  # produces a blank line in between

ew
>>> '\\new'
'\\new'
>>> print '\\new'
\new
>>> r'\new'
'\\new'
>>> '/new'
'/new'

Windows接受正斜杠就好了;如果路径分隔符指向前方或后方,则无关紧。