2015-09-18 22 views
1

我遇到了一個麻煩的問題,我的代碼一直無法弄清楚。基本上,我將文件從計算機上的本地目錄複製到Dropbox文件夾,該文件夾充當我和其他人的項目存儲庫。Shutil.copy IO Error2當目錄存在時

執行shutil.copy行時,我總是碰到IO錯誤。 Errno 2,N osuch文件或目錄。但是目錄和文件都存在。當我將目錄更改爲不同的/測試位置(我的代碼中的test_dir)時,代碼運行得非常好。任何見解將不勝感激。

import os, os.path 
import re 
import shutil 
import sys 

#File Location 
directory_list = "path where files are located" 

#Dropbox base directory: 
dropbox = "path to dropbox directory" 

test_dir = "path to test directory on my local machine"  

sed_files = os.listdir(directory_list) 

for i in sed_files: 
    #print i.split("BBB")[0] 

    #df 
    copy_dir = re.sub(r'XXX',r'_',i.split("BBB")[0]) 
    copy_dir = re.sub(r'ZZZ',r'/',copy_dir) 
    copy_dir = dropbox + copy_dir + "/FIXED/" 
    if not os.path.exists(copy_dir): 
     os.makedirs(copy_dir)  

    shutil.copy(directory_list+i,copy_dir) 
    #print directory_list+i 
    #os.rename(copy_dir+i,copy_dir+i.split("BBB")[1]) 

回溯錯誤是:

Traceback (most recent call last): 
File "copy_SE_files.py", line 25, in <module> shutil.copy(direcotry_list+i,copydir) 
File "C:\Python27\ArcGIS10.1\lib\shutil.py", line 116, in copy copyfile(src,dst) 
File "C:\Python27\ArcGIS10.1\lib\shutil.py", line 82, in copyfile with open(dst, 'wb') as fdst: 
IOError: [Errno 2] No such file or directory: 'C:/Users/myusername/Dropbox/NASA_HyspIRI_Project/Field_Data/Spectra/CVARS/April2014/LemonTrees/04172014_SE_LemonTreeCanopy/SE_Files/SpectraZZZCVARSZZZApril2014ZZZLemonTreesZZZZ04172014XXXSEXXXLemonTreeCanopyZZZSEXXXFilesBBBCVARS_na_LemonTrees_Bareground1_4deg_Refl_00355.sed' 

問題解決了由於堆棧溢出的敏銳眼睛。修改了行改爲:

shutil.copy(directory_list+i,'\\\\?\\'+os.path.abspath(copy_dir)) 
+2

顯示回溯 –

+0

添加了回溯。 – user1819274

+1

http://stackoverflow.com/a/1880480/2141635 –

回答

2

你失敗了,因爲路徑的組合長度大於Window的MAX_PATH限制。 C:/Users/myusername/Dropbox/NASA_HyspIRI_Project/Field_Data/Spectra/CVARS/April2014/LemonTrees/04172014_SE_LemonTreeCanopy/SE_Files/SpectraZZZCVARSZZZApril2014ZZZLemonTreesZZZZ04172014XXXSEXXXLemonTreeCanopyZZZSEXXXFilesBBBCVARS_na_LemonTrees_Bareground1_4deg_Refl_00355.sed長度爲274個字符,並且不會遇到任何問題,但大多數Windows文件操作API將無法正常工作,且路徑長於MAX_PATH(其中260個,其中一個保留用於終止符號NUL)。假設Python使用正確的API,你可以使它與the extended path prefix,\\?\一起工作(它可能要求你在你的路徑中使用反斜槓而不是正斜槓;我不清楚這一點;閱讀文檔)。

0

,在跳出我的第一件事就是這一行:

shutil.copy(directory_list+i,copy_dir) 

考慮將其更改爲

shutil.copy(os.path.join(directory_list,i),copy_dir) 

督察,串聯文件時使用os.path.join()路徑。