如何解决如何使用 Python 通过检查文件夹中的项目从远程服务器到本地目录来下载文件夹?
在我的根文件夹中,我有几个文件夹。 例如:
root
AAA
a.txt
a.xml
BBB
b.txt
b.xml
CCC
c.xml
DDD
......
我需要下载除 DDD 之外的所有包含 .txt 文件的文件夹。 例如 AAA,BBB 有 .txt 文件,所以我需要下载它,除了 CCC(因为 CCC 不包含 .txt)
我使用以下代码下载除 DDD 之外的所有文件,但无法检查它是否包含 .txt
我试过的代码:
from paramiko import SSHClient
import paramiko
from stat import S_ISDIR
ssh = SSHClient()
ssh.load_system_host_keys()
ssh.connect('host',username='test',password='123')
remote_dir ='/root'
local_path = 'C:/download/'
def download_dir(remote_dir,local_dir):
import os
os.path.exists(local_dir) or os.makedirs(local_dir)
dir_items = sftp.listdir_attr(remote_dir)
for item in dir_items:
# assuming the local system is Windows and the remote system is Linux
# os.path.join won't help here,so construct remote_path manually
if(item.filename != "DDD"):
remote_path = remote_dir + '/' + item.filename
local_path = os.path.join(local_dir,item.filename)
if S_ISDIR(item.st_mode):
download_dir(remote_path,local_path)
else:
sftp.get(remote_path,local_path)
download_dir(remote_dir,local_path)
如何查看其中的文件并根据该文件下载文件夹?
解决方法
您可以使用 glob.glob(pathname,"*.txt") 获取目录中的所有 txt 文件。
文档可以在here
,像这样:
import fnmatch
if S_ISDIR(item.st_mode):
if any(fnmatch.fnmatch(f,"*.txt") for f in sftp.listdir(remote_path)):
download_dir(remote_path,local_path)
else:
sftp.get(remote_path,local_path)
这有点低效,因为您将列出所有子文件夹两次。但如果需要,您可以轻松对其进行优化。
基于List files on SFTP server matching wildcard in Python using Paramiko。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。