python 搜索一个文件(从列表中),输入缩写名称

wooyq4lh  于 2022-12-17  发布在  Python
关注(0)|答案(1)|浏览(107)

下面的代码正在连接到我的FTP服务器并查找文件;这些文件在文件名和附加文件名的开头都有时间戳,如“timestamp+name.txt”。这些时间戳通常有16个字符,如下所示:

我试图让这个“搜索器”忽略时间戳来搜索文件,所以它实际上应该查找“FTPtest.txt”。我正在努力使用for循环。我做了一些代码来测试:

files = ftp.nlst()
for x in files:
    print(x[16:])

这确实列出了文件与削减名称,但我不知道如何利用它在我的代码。这下面的代码是完全工作,做它的工作,但现在我需要修改它。在输入用户只写短文件名('FTPtest.txt'),但不是全名,但它搜索精确的输入,忽略时间戳。这里的时间戳总是16个字符,但名称可以不同于FTPtest.txt。下面是我的代码:

from ftplib import FTP
from ftplib import FTP, error_perm

def repeat():
    ftp = FTP(host="ip")
    ftp.login(user='user', passwd='pass')
    file_name = str(input('>>> What is name of your file? \n'))
  
    try:
        ftp.cwd('/test')
        if file_name in ftp.nlst():
            print("+++File found!+++")
        else:
            print("---File not found---")
    except error_perm:
            print("File does not exist")
    ftp.quit()
while True:
   repeat()
von4xj4u

von4xj4u1#

我的理解是,您只是想看看是否有一个完全匹配的文件排除前16个字符,所以这样做。

try:
        ftp.cwd('/test')
        if file_name in [f[16:] for f inftp.nlst()]:
            print("+++File found!+++")
        else:
            print("---File not found---")
    except error_perm:
            print("File does not exist")

应该可以。注意,这不是最有效的,因为它在列表上迭代了两次,但是它很简洁。

相关问题