2016-08-10 2 views
-1

Мой текущий код Python:Как файл открыть с другим именем, используя питона ftplib

import ftplib 
import hashlib 
import urllib 

def ftp(): 
    hashing="123" 
    ftp = ftplib.FTP('localhost','kevin403','S$ip1234') 
    ftp.cwd('/var/www/html/image') 

    m=hashlib.md5() 
    file = open('Desktop/test.png','rb') 
    m.update(hashing) 
    dd = m.hexdigest() 
    ftp.storbinary('STOR '+dd+ '.png', file) 

    file.close() 
    ftp.quit() 

я получил другое имя, состоящее из test.png, test1.png и test2.png. И я хотел открыть файл и сохранить его, когда какой-либо файл открывается. Я попытался с помощью * звездочки и я получил сообщение об ошибке:

file = open('Desktop/*.png, 'rb') 
+0

Я запутался, у вас есть файлы '' 'test1.png, test2.png,' '' и т.д. уже? Если это так, то сначала залейте их и составите список из них? Затем перейдем к списку. Возможно, я не понимаю, ваш вопрос непонятен. –

+0

Эти 3 файла находятся на моем рабочем столе. –

+0

Вы хотите, чтобы функция ftp находила все эти файлы или работала над одним файлом за вызов функции? –

ответ

1

Попробуйте эту версию вместо:

import os 
import ftplib 
import hashlib 
import glob 

image_directory = '/home/Desktop/images/' 

hashing = "123" 
m = hashlib.md5() 
m.update(hashing) 
dd = m.hexdigest() 

ftp = ftplib.FTP('localhost','kevin403','S$ip1234') 
ftp.cwd('/var/www/html/image') 

for image in glob.iglob(os.path.join(image_directory, 'test*.png')): 
    with open(image, 'rb') as file: 
     ftp.storbinary('STOR '+dd+ '.png', file) 

ftp.close() 
ftp.quit() 

Я надеюсь, вы понимаете, это будет просто написать тот же файл снова и снова на вашем FTP-сервере, так как dd никогда не обновляется.

Вы также не должны больше использовать MD5. Если вы просто хотите, чтобы хранить файлы с контрольными суммами, попробуйте эту версию вместо:

import os 
import ftplib 
import hashlib 
import glob 

def get_sha512(file): 
    f = open(file, 'rb') 
    value = hashlib.sha256(f.read()).digest() 
    f.close() 
    return value 

image_directory = '/home/Desktop/images/' 

ftp = ftplib.FTP('localhost','kevin403','S$ip1234') 
ftp.cwd('/var/www/html/image') 

for image in glob.iglob(os.path.join(image_directory, 'test*.png')): 
    hash = get_sha512(image)[:16] 
    with open(image, 'rb') as file: 
     ftp.storbinary('STOR {}.png'.format(hash), file) 

ftp.close() 
ftp.quit() 
+0

Является ли iglob или glob? –

+0

iglob более эффективен –

+0

Когда я запускаю скрипт, и у меня есть эта ошибка: Traceback (последний последний звонок): Файл «/home/kevin403/ftpttest.py», строка 17, в для изображения в глобусе. iglob (os.path.join (image_directory, 'test * .png')): NameError: имя 'glob' не определено –

0

Как насчет этого? Использовать glob для поиска файлов, а затем перебрать список из glob, запускающего ftp() для каждого файла?

import ftplib 
import hashlib 
import urllib 
from glob import glob 

def ftp(filename): 
    hashing="123" 
    ftp = ftplib.FTP('localhost','kevin403','S$ip1234') 
    ftp.cwd('/var/www/html/image') 

    m=hashlib.md5() 
    file = open(filename,'rb') 
    m.update(hashing) 
    dd = m.hexdigest() 
    ftp.storbinary('STOR '+dd+ '.png', file) 

    file.close() 
    ftp.quit() 

if __name__ == '__main__': 
    # get the files 
    templist = glob('test*.png') 

    # loop over the files we found 
    for filename in templist: 
     ftp(filename) 
+0

Как вам запустить всю программу? Я получил эту ошибку: TypeError: ftp() принимает ровно 1 аргумент (0 задано) –

+0

Скопируйте все, что я вложил в файл, и запустил его с помощью: python myfile.py в том же каталоге, что и png (я обновил код) В приведенной выше ошибке вы все равно не передаете имя файла функции ftp(). Ответ заключается в ошибке. Теперь он ожидает 1 аргумент (имя файла), и вы дали ему 0. Линии под функцией - это то, что передает этот аргумент ftp() –

+0

. Я пытаюсь запустить таким образом: импортировать ftpttest, затем распечатать ftp (имя файла), и я получил ошибку что имя файла не определено. –

Смежные вопросы