簡體   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