根据文件名通过 FTP 上传多个文件
Uploading multiple files via FTP based on filename
使用 Python 3.4
我正在生成看起来像 'Report_XXXXXX.xlsx' 的文件,其中 X 是唯一的客户编号。我有一个服务器,其中包含名为 'XXXXXX.CustomerName' 的文件夹。我正在尝试遍历每个 file/report 并根据客户编号将其上传到匹配的文件夹。我有一些东西可以在我的小型测试环境中工作,但我认为它没有按照我想要的方式工作。它上传文件,但我试图在找不到匹配项的任何时候捕捉。目前,我对每个文件的 IF 语句都失败了。我想我循环了太多次或循环了错误的项目。
import os
import ftplib
creds = [line.rstrip('\n') for line in open('C:\folder\credentials.txt')]
ftp = ftplib.FTP_TLS("server.com")
ftp.login(creds[0], creds[1])
ftp.prot_p()
src_dir = 'C:\Reports\'
src_files = os.listdir('C:\Reports\')
for folder_name in ftp.nlst():
for file_name in src_files:
if folder_name[0:6] == file_name[7:-5]:
ftp.cwd('/'+folder_name)
open_file = open(src_dir+file_name, 'rb')
ftp.storbinary('STOR '+file_name, open_file)
open_file.close()
else:
print('Folder ' + folder_name + ' Not Found')
ftp.quit()
例如,源目录有 3 个文件:'Report_100002.xlsx, Report_100003.xlsx, Report_100007.xlsx' 并且服务器有匹配的文件夹和一些额外的文件夹。文件上传,输出如下所示:
Folder 100000.CustomerName Not Found
Folder 100000.CustomerName Not Found
Folder 100000.CustomerName Not Found
Folder 100002.CustomerName Not Found
Folder 100002.CustomerName Not Found
Folder 100003.CustomerName Not Found
Folder 100003.CustomerName Not Found
Folder 100007.CustomerName Not Found
Folder 100007.CustomerName Not Found
我正在努力达到可以正确记录每个项目的状态,以及它是否成功、它位于哪个文件夹等...
在您的内部 for
循环中,您将 src_dir
中的所有 3 个文件名与 folder_name
进行比较,但最多只有一个满足 if
语句中的条件。因此,对于 ftp 服务器上的每个文件夹,其他 2 或 3 个不匹配的文件会导致您看到的输出。您可以使用标志来跟踪是否找到匹配项并根据该标志打印输出。
另一件事是你应该开始迭代 src_files
然后通过迭代 ftp.nlist()
找到匹配的文件夹名称(你对没有匹配文件夹的源文件感兴趣,而不是另一种方式)。所以像这样(假设一个源文件被允许在多个文件夹中结束):
....
folder_names = ftp.nlst()
for file_name in src_files:
folder_found = False
for folder_name in folder_names:
if folder_name[0:6] == file_name[7:-5]:
folder_found = True
ftp.cwd('/'+folder_name)
open_file = open(src_dir+file_name, 'rb')
ftp.storbinary('STOR '+file_name, open_file)
open_file.close()
if not folder_found:
print('No destination folder found for ' + file_name)
ftp.quit()
(folder_names = ftp.nlst()
在那里,因此您不会重复列出服务器上的目录)
使用 Python 3.4
我正在生成看起来像 'Report_XXXXXX.xlsx' 的文件,其中 X 是唯一的客户编号。我有一个服务器,其中包含名为 'XXXXXX.CustomerName' 的文件夹。我正在尝试遍历每个 file/report 并根据客户编号将其上传到匹配的文件夹。我有一些东西可以在我的小型测试环境中工作,但我认为它没有按照我想要的方式工作。它上传文件,但我试图在找不到匹配项的任何时候捕捉。目前,我对每个文件的 IF 语句都失败了。我想我循环了太多次或循环了错误的项目。
import os
import ftplib
creds = [line.rstrip('\n') for line in open('C:\folder\credentials.txt')]
ftp = ftplib.FTP_TLS("server.com")
ftp.login(creds[0], creds[1])
ftp.prot_p()
src_dir = 'C:\Reports\'
src_files = os.listdir('C:\Reports\')
for folder_name in ftp.nlst():
for file_name in src_files:
if folder_name[0:6] == file_name[7:-5]:
ftp.cwd('/'+folder_name)
open_file = open(src_dir+file_name, 'rb')
ftp.storbinary('STOR '+file_name, open_file)
open_file.close()
else:
print('Folder ' + folder_name + ' Not Found')
ftp.quit()
例如,源目录有 3 个文件:'Report_100002.xlsx, Report_100003.xlsx, Report_100007.xlsx' 并且服务器有匹配的文件夹和一些额外的文件夹。文件上传,输出如下所示:
Folder 100000.CustomerName Not Found
Folder 100000.CustomerName Not Found
Folder 100000.CustomerName Not Found
Folder 100002.CustomerName Not Found
Folder 100002.CustomerName Not Found
Folder 100003.CustomerName Not Found
Folder 100003.CustomerName Not Found
Folder 100007.CustomerName Not Found
Folder 100007.CustomerName Not Found
我正在努力达到可以正确记录每个项目的状态,以及它是否成功、它位于哪个文件夹等...
在您的内部 for
循环中,您将 src_dir
中的所有 3 个文件名与 folder_name
进行比较,但最多只有一个满足 if
语句中的条件。因此,对于 ftp 服务器上的每个文件夹,其他 2 或 3 个不匹配的文件会导致您看到的输出。您可以使用标志来跟踪是否找到匹配项并根据该标志打印输出。
另一件事是你应该开始迭代 src_files
然后通过迭代 ftp.nlist()
找到匹配的文件夹名称(你对没有匹配文件夹的源文件感兴趣,而不是另一种方式)。所以像这样(假设一个源文件被允许在多个文件夹中结束):
....
folder_names = ftp.nlst()
for file_name in src_files:
folder_found = False
for folder_name in folder_names:
if folder_name[0:6] == file_name[7:-5]:
folder_found = True
ftp.cwd('/'+folder_name)
open_file = open(src_dir+file_name, 'rb')
ftp.storbinary('STOR '+file_name, open_file)
open_file.close()
if not folder_found:
print('No destination folder found for ' + file_name)
ftp.quit()
(folder_names = ftp.nlst()
在那里,因此您不会重复列出服务器上的目录)