util/lib/analysis_package/utils/file_util.py

82 lines
2.5 KiB
Python
Raw Permalink Normal View History

2024-05-12 12:18:24 +00:00
# -*- coding: UTF-8 -*-
"""
@Project -> File IoD_data_analysis_tool -> file_util
@IDE PyCharm
@Author rengengchen
@Date 2022/5/10 17:21
@Desc
"""
import os
import queue
import shutil
import paramiko
def list_files(dir_paths):
files = []
for root, dir_path, filepath in walk(dir_paths):
if filepath:
files.append(os.path.join(root, filepath))
return files
def walk(dir_paths):
dir_queue = queue.Queue()
if isinstance(dir_paths, str):
dir_paths = [dir_paths]
for dir_path in dir_paths:
dir_queue.put(dir_path)
while not dir_queue.empty():
dirname = dir_queue.get()
for root, dirs, files in os.walk(dirname):
for dirname in dirs:
dir_queue.put(os.path.join(root, dirname))
yield root, dirname, None
for filename in files:
yield root, None, filename
def copy(s, t):
if os.path.isfile(s):
shutil.copy(s, t)
else:
if not os.path.exists(t):
os.mkdir(t)
s = os.path.abspath(s)
t = os.path.abspath(t)
for root, dirname, filename in walk(s):
if dirname:
os.mkdir(os.path.join(t, dirname))
else:
shutil.copy(os.path.join(root, filename), os.path.join(root.replace(s, t), filename))
class RemoteFileUtil:
def __init__(self, ip, username, password, port=22, local_dir=None, remote_dir=None):
tran = paramiko.Transport((ip, port))
tran.connect(username=username, password=password)
self.sftp = paramiko.SFTPClient.from_transport(tran).getfo()
self.local_dir = local_dir
self.remote_dir = remote_dir
def ls(self, remote_dir=None):
if remote_dir is None:
remote_dir = self.remote_dir
return self.sftp.listdir_attr(remote_dir)
def upload_file(self, local_filepath=None, remote_filepath=None, filename=None):
if local_filepath is None:
local_filepath = os.path.join(self.local_dir, filename)
if remote_filepath is None:
remote_filepath = os.path.join(self.remote_dir, filename)
self.sftp.put(local_filepath, remote_filepath)
def download_file(self, local_filepath=None, remote_filepath=None, filename=None):
if local_filepath is None:
local_filepath = os.path.join(self.local_dir, filename)
if remote_filepath is None:
remote_filepath = os.path.join(self.remote_dir, filename)
self.sftp.get(remote_filepath, local_filepath)