2015-04-06 57 views
0
import sys 
import os 
import re 
import ftplib 

os.system('dir /S "D:\LifeFrame\*.jpg" > "D:\Python\placestogo.txt"') #this is where to search. 
dat = open('placestogo.txt','r').read() 

drives = re.findall(r'.\:\\.+.+',dat) 
for i in range(len(drives)): 
    path = drives[i] 
    os.system('dir '+ path +'\*.jpg > D:\python\picplace.txt') 
    picplace = open('picplace.txt','r').read() 
    pics = re.findall(r'\w+_\w+.\w+..jpg|IMG.+|\w+.jpg',picplace) 
    for i in range(len(pics)): 
     filename = pics[i] 
     ftp = ftplib.FTP("localhost") 
     print ftp.login("xxxxxxxx","xxxxxxxx") 
     ftp.cwd("/folder") 
     myfile = open(path,"rb") 
     print ftp.storlines('STOR ' + filename, myfile) 
     print ftp.quit() 
     sys.exit() 

我試圖所有這些文件複製到我的FTP服務器,但它給了我這個錯誤:爲什麼我會得到這個IOerror13?使用Python

d:\Python>stealerupload.py 
230 Logged on 
Traceback (most recent call last): 
    File "D:\Python\stealerupload.py", line 22, in <module> 
    myfile = open(path,"rb") 
IOError: [Errno 22] invalid mode ('rb') or filename: '"D:\\LifeFrame"' 

任何人知道問題出在哪裏?我正在以管理員身份運行,並且文件夾應具有權限

+0

我不認爲這與你的錯誤有任何關係,但請考慮使用'glob'模塊來搜索文件,而不是使用'os.system'。 – Kevin 2015-04-06 14:07:25

回答

0

該錯誤似乎很明顯。您正試圖打開一個目錄路徑,這既不可能也不是您真正想要做的。該位:

for i in range(len(drives)): 
    path = drives[i] 
    ... 
    for i in range(len(pics)): 
     ... 
     myfile = open(path,"rb") 

要設置path在循環中,成爲您drives要素之一。這些項目中的每一個都顯示爲目錄路徑。然後,您嘗試稍後打開path,這是一個目錄路徑而不是文件。

+0

感謝您的回覆,不幸的是我並沒有解決修復問題.. – Anonymous 2015-04-06 14:56:55

+0

您可以嘗試'os.path.join(路徑,文件名)'。因爲,你的代碼真的不是最理想的。你不需要迭代長度範圍,你可以直接迭代'drives'或'pics'。另外,正如您對問題的評論中所提到的那樣,glob模塊可能對您更好。至少,看看'os.walk'模塊。 – paidhima 2015-04-06 15:01:55

+0

'os.path.join(path,filename)'產生相同的錯誤,除非Iv'e把它放在錯誤的行中......我也是一個begginer程序員:)。有沒有辦法解決這個問題?或者我需要爲每張圖片運行另一個'os.rename()'行並將其上傳 – Anonymous 2015-04-06 15:12:44

0

在錯誤消息中,它顯示'"D:\\LifeFrame"',對於我來說看起來您在path中有多餘的引號。嘗試添加print path以查看其價值。

也許你想從filename數據上傳到服務器,而不是從path,在這種情況下,Python中顯示錯誤消息是哪裏的錯誤是:你應該打開filename代替。

+0

嗯,沒什麼新的。嘗試將'myfile = open(path,「rb」)'改爲'myfile = open(filename,「rb」)'看看是否是這樣。 – 2015-04-06 14:15:06

+0

(請注意,如果*確實修復了這個錯誤,由於循環內有'sys.exit()'調用,它仍然只會上傳一個文件。) – 2015-04-06 14:16:05

+0

' 230登錄 回溯(最近一次通話結束): IOError:[Errno 22]無效模式('rb')或文件名:'「: 文件」D:\ Python \ stealerupload.py「,第22行,在 myfile = open(path,」rb「) D:\\ LifeFrame'' ' – Anonymous 2015-04-06 14:17:24