使用 ftplib 从 FTP 服务器删除一些 csv 文件
Delete some csv files from FTP Server using ftplib
我正在尝试从 ftp 服务器中删除一些 csv 文件。使用 ftplib
库。这些文件不会从服务器中删除。我对服务器有读写权限。甚至没有显示错误消息。我有大约20个文件要删除,我也可以成功打印出文件名。
dir_files = [] # to store all files in the root
try:
ftp = ftplib.FTP(os.environ.get("TIENKANG_HOST")) # port is 21 by default
ftp.login(
user=os.environ.get("TIENKANG_USER"), passwd=os.environ.get("TIENKANG_PASS")
)
ftp.encoding = "unicode_escape"
ftp.dir(dir_files.append)
for file_info in dir_files:
if "DATA_collection" in file_info:
if filename not in file_info:
old_filename = file_info.split(" ")[-1]
if old_filename[-3:] == "csv":
# data can be exported to db if necessary before removing
# print(old_filename)
ftp.delete(old_filename)
except Exception as e:
print(e)
finally:
ftp.quit()
我的文件在服务器的根目录下。下面给出了我如何整理文件名。 (不幸的是 ftp.nlst 导致错误)
FileZilla 根文件夹视图:
我如何整理文件名:
我不得不使用 ftp.encoding = "unicode_escape"
来获取 ftp 服务器中的所有文件名。在不更改编码的情况下,我会收到错误消息,因为 ftp 服务器中存在非标准 unicode 编码的机器相关文件。
因此,在删除之前,我将编码改回 ftp.encoding = "utf-8"
并且一切顺利。
解决方法如下,
dir_files = []
try:
ftp = ftplib.FTP(os.environ.get("TIENKANG_HOST")) # port is 21 by default
ftp.login(
user=os.environ.get("TIENKANG_USER"), passwd=os.environ.get("TIENKANG_PASS")
)
ftp.encoding = "unicode_escape"
ftp.dir(dir_files.append)
# Set encoding to utf-8, so the file can be found to delete
ftp.encoding = "utf-8"
for file_info in dir_files:
if "DATA_collection" in file_info:
if filename not in file_info:
old_filename = file_info.split(" ")[-1]
if old_filename[-3:] == "csv":
# data can be exported to db if necessary before removing
ftp.delete(old_filename)
except Exception as e:
print(e)
finally:
ftp.quit()
我正在尝试从 ftp 服务器中删除一些 csv 文件。使用 ftplib
库。这些文件不会从服务器中删除。我对服务器有读写权限。甚至没有显示错误消息。我有大约20个文件要删除,我也可以成功打印出文件名。
dir_files = [] # to store all files in the root
try:
ftp = ftplib.FTP(os.environ.get("TIENKANG_HOST")) # port is 21 by default
ftp.login(
user=os.environ.get("TIENKANG_USER"), passwd=os.environ.get("TIENKANG_PASS")
)
ftp.encoding = "unicode_escape"
ftp.dir(dir_files.append)
for file_info in dir_files:
if "DATA_collection" in file_info:
if filename not in file_info:
old_filename = file_info.split(" ")[-1]
if old_filename[-3:] == "csv":
# data can be exported to db if necessary before removing
# print(old_filename)
ftp.delete(old_filename)
except Exception as e:
print(e)
finally:
ftp.quit()
我的文件在服务器的根目录下。下面给出了我如何整理文件名。 (不幸的是 ftp.nlst 导致错误)
FileZilla 根文件夹视图:
我如何整理文件名:
我不得不使用 ftp.encoding = "unicode_escape"
来获取 ftp 服务器中的所有文件名。在不更改编码的情况下,我会收到错误消息,因为 ftp 服务器中存在非标准 unicode 编码的机器相关文件。
因此,在删除之前,我将编码改回 ftp.encoding = "utf-8"
并且一切顺利。
解决方法如下,
dir_files = []
try:
ftp = ftplib.FTP(os.environ.get("TIENKANG_HOST")) # port is 21 by default
ftp.login(
user=os.environ.get("TIENKANG_USER"), passwd=os.environ.get("TIENKANG_PASS")
)
ftp.encoding = "unicode_escape"
ftp.dir(dir_files.append)
# Set encoding to utf-8, so the file can be found to delete
ftp.encoding = "utf-8"
for file_info in dir_files:
if "DATA_collection" in file_info:
if filename not in file_info:
old_filename = file_info.split(" ")[-1]
if old_filename[-3:] == "csv":
# data can be exported to db if necessary before removing
ftp.delete(old_filename)
except Exception as e:
print(e)
finally:
ftp.quit()