У меня как 2000 файлов внутри папки на файловом сервере.
Я использую paramiko для SFTP этих файлов. Все работает нормально.
Теперь я планирую выбрать первые 100 файлов, а затем следующий лот.
Любые предложения о том, как я могу сделать это через paramiko.
Итак, теперь у меня есть добавленный код. Логика в том, что я успешно перемещаю файлы между моим сервером и рабочим столом. единственное, что мне нужно сделать, это добавить пакетную обработку файлов.
import os
from stat import S_ISDIR
import paramiko
import tika
from tika import parser
tika.initVM()
paramiko.util.log_to_file('D:/Paramiko/logs/paramiko.log')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('xxxx', username='ubuntu', password='', key_filename='D:/Paramiko/test.pem')
sftp = ssh.open_sftp()
depth=2
stdin, stdout, stderr = ssh.exec_command("find . -mindepth "+str(depth)+" -maxdepth "+str(depth)+" -type d ")
dlist = list(stdout.readlines())
len = (len(dlist))
def getfiles_from_directory(subfolder,filename,sftp,local_p):
remote_path = subfolder+'/'+filename
local_path = os.path.join(local_p,filename)
#print('R:'+remote_path+'L:'+local_path)
sftp.get(remote_path,local_path)
try:
parsed = parser.from_file(local_path)
print('MetaData:'+str(parsed['metadata']))
except KeyError as k:
print(k)
folders_copied = []
files_copied = []
for direc in dlist:
direcname = str(direc).replace('./', '')
#print(direcname)
if not direcname.startswith('.'):
local_path = 'D:/Paramiko/Test' #make sure this path exists i.e Test folder inside Paramiko is made prior to execution of this line
for i in range(depth):
stdin, stdout, stderr = ssh.exec_command("cd "+direcname+" pwd")
subfolder = stdout.readlines()
#print("Query Result:"+str(subfolder))
subfolder = str(subfolder[0]).strip()
local_p = os.path.join(local_path,direcname.strip())
if os.path.exists(local_p)==False:
os.mkdir(local_p)
sftp.chdir(subfolder)
children = sftp.listdir()
# stdin, stdout, stderr = ssh.exec_command("ls")
# subfolder_content = list(stdout.readlines())
#getfiles_from_directory(sftp,subfolder)
for content in children:
content_sub = str(content)
if content_sub.endswith('\n')==False and content_sub.__contains__('.'):
print('Found a file:'+content_sub)
if subfolder not in folders_copied:
getfiles_from_directory(subfolder,content_sub,sftp,local_p)
files_copied.append(subfolder+'/'+content_sub)
else:
print('Found a folder:'+content_sub)
folders_copied.append(subfolder)
print('Folders Copied:'+str(folders_copied))
print('Files Copied:'+str(files_copied))