我目前的python代码:
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 :(得分: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()
答案 1 :(得分:0)
这个怎么样?使用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)