繁体   English   中英

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

[英]os.rename path error while moving file to subdirectory

我是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:\\\\ folder \\\\ fname'->'E:\\\\ folder \\\\ subfolder \\\\ fname'

正确的路径应该是单反斜线。 我正在使用Windows 8.1和python34。 谁能帮我这个。 我知道这个问题一定是重复的,但我无法理解自己在做什么错。 shutil.move生成类似的错误

双反斜杠是正常的 ; 它们不是错误的原因。 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()函数来确保创建路径中的所有文件夹:

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接受正斜杠就可以了; 不管路径分隔符是指向前还是指向后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM