У нас есть папка ftp, которая содержит более 700 файлов (автоматически генерируемых из нашей системы) с именем файла, например: ff9a6c2b-4222-4464-a314-dce56efe76cb.txt
.. ffbaef37-9d73-41d5-8f23-7ca7c82b3969.txt
.. fffa92f0-9e76-4cce-8933-d256bac90ffa.txt
Я пытаюсь написать скрипт для автоматической загрузки файлови для предотвращения загрузки файлов более одного раза, моя идея состоит в том, чтобы сохранить все загруженные имена файлов в XML-файле (это работало хорошо) и проверить, существует ли имя в XML-файле перед загрузкой.
Проблема даже в том случае, если естьЭто 8 новых файлов, которые он загружает только один.
Мой код
import ftputil
from subprocess import Popen
import ftplib
import os
import os.path
import xml.etree.cElementTree as ET
server = 'ip_adress'
user = 'user'
password = 'Passwd'
ftp = ftplib.FTP(server)
ftp.login(user, password)
files = []
root = ET.Element("files")
file_exists = os.path.isfile("filename.xml")
if file_exists:
f = ET.parse("filename-Copie.xml")
root = f.getroot()
files = ftp.nlst()
for file in files:
for item in root:
if file != item.text :
#print ("the file name: ",item.text, " already exist")
ftp_host = ftputil.FTPHost(server, user, password)
ftp_host.download(file, file)
ET.SubElement(root, "file", name="filename").text = file
tree = ET.ElementTree(root)
tree.write("filename.xml")
p = Popen("move.bat", cwd=r"C:\\Users\\Sas\\Desktop\\ftpdown\\")
stdout, stderr = p.communicate()
print("Finished!")
else:
f = open("filename.xml", "w")
with ftputil.FTPHost(server, user, password) as ftp_host:
files = ftp_host.listdir(ftp_host.curdir)
root = ET.Element("files")
for file in files:
if ftp_host.path.isfile(file):
ftp_host.download(file, file)
ET.SubElement(root, "file", name="filename").text = file
tree = ET.ElementTree(root)
tree.write("filename.xml")
p = Popen("move.bat", cwd=r"C:\\Users\\Sas\\Desktop\\ftpdown\\")
stdout, stderr = p.communicate()
print("Finished!")