![](/img/trans.png)
[英]Downloading files from ftp server using python but files not opening after downloading
[英]auto download files from ftp using python and prevent downloading files more than one time
我們有一個 ftp 文件夾,其中包含 700 多個文件(自動從我們的系統生成),文件名如下: ff9a6c2b-4222-4464-a314-dce56efe76cb.txt
fffa92f0-9e76-4cce-8933-d256bac90ffa.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!")
我通過將從 xml 提取的文件名存儲到一個列表中解決了這個問題,如果其他人和我有同樣的問題,這里是下面的代碼
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()
oldfile = []
for child in root:
oldfile.append(child.text)
for file in files:
if file not in oldfile:
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!")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.