os.rename 将文件移动到子目录时出现路径错误
os.rename path error while moving file to subdirectory
我是 python 的新手,一般来说是编码方面的新手。我花了很多时间试图修复此错误,但我无法弄清楚如何执行此操作。我有一个包含子文件夹的主文件夹,我想将文件从主文件夹移动到子文件夹。这应该可以通过 os.rename
或 shutil.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] The system cannot find the path specified: '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()
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 可以接受正斜杠;它不关心路径分隔符是向前还是向后。
我是 python 的新手,一般来说是编码方面的新手。我花了很多时间试图修复此错误,但我无法弄清楚如何执行此操作。我有一个包含子文件夹的主文件夹,我想将文件从主文件夹移动到子文件夹。这应该可以通过 os.rename
或 shutil.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] The system cannot find the path specified: '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()
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 可以接受正斜杠;它不关心路径分隔符是向前还是向后。