优化使用 pysftp 检索文件大小的性能
Optimize the performance of retreiving file sizes with pysftp
我需要获取特定位置(在系统和 SFTP 内)的文件详细信息,并获取 SFTP 上某些位置的文件大小,这可以使用共享代码实现。
def getFileDetails(location: str):
filenames: list = []
if location.find(":") != -1:
for file in glob.glob(location):
filenames.append(getFileNameFromFilePath(file))
else:
with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword) as sftp:
remote_files = [x.filename for x in sorted(sftp.listdir_attr(location), key=lambda f: f.st_mtime)]
if location == LOCATION_SFTP_A:
for filename in remote_files:
filenames.append(filename)
sftp_archive_d_size_mapping[filename] = sftp.stat(location + "/" + filename).st_size
elif location == LOCATION_SFTP_B:
for filename in remote_files:
filenames.append(filename)
sftp_archive_e_size_mapping[filename] = sftp.stat(location + "/" + filename).st_size
else:
for filename in remote_files:
filenames.append(filename)
sftp.close()
return filenames
LOCATION_SFTP_A和LOCATION_SFTP_B[中有超过10000+个文件=23=]。对于每个文件,我需要获取文件大小。获得我正在使用的尺寸
sftp_archive_d_size_mapping[filename] = sftp.stat(location + "/" + filename).st_size
sftp_archive_e_size_mapping[filename] = sftp.stat(location + "/" + filename).st_size
# Time Taken : 5 min+
sftp_archive_d_size_mapping[filename] = 1 #sftp.stat(location + "/" + filename).st_size
sftp_archive_e_size_mapping[filename] = 1 #sftp.stat(location + "/" + filename).st_size
# Time Taken : 20-30 s
如果我注释 sftp.stat(location + "/" + filename).st_size
并分配静态值 运行 整个代码只需要 20-30 秒。我正在寻找一种方法如何优化时间并获取文件大小的详细信息。
Connection.listdir_attr
已经为您提供了 SFTPAttributes.st_size
中的文件大小。
无需为每个文件调用 Connection.stat
来获取大小(再次)。
另请参阅:
我需要获取特定位置(在系统和 SFTP 内)的文件详细信息,并获取 SFTP 上某些位置的文件大小,这可以使用共享代码实现。
def getFileDetails(location: str):
filenames: list = []
if location.find(":") != -1:
for file in glob.glob(location):
filenames.append(getFileNameFromFilePath(file))
else:
with pysftp.Connection(host=myHostname, username=myUsername, password=myPassword) as sftp:
remote_files = [x.filename for x in sorted(sftp.listdir_attr(location), key=lambda f: f.st_mtime)]
if location == LOCATION_SFTP_A:
for filename in remote_files:
filenames.append(filename)
sftp_archive_d_size_mapping[filename] = sftp.stat(location + "/" + filename).st_size
elif location == LOCATION_SFTP_B:
for filename in remote_files:
filenames.append(filename)
sftp_archive_e_size_mapping[filename] = sftp.stat(location + "/" + filename).st_size
else:
for filename in remote_files:
filenames.append(filename)
sftp.close()
return filenames
LOCATION_SFTP_A和LOCATION_SFTP_B[中有超过10000+个文件=23=]。对于每个文件,我需要获取文件大小。获得我正在使用的尺寸
sftp_archive_d_size_mapping[filename] = sftp.stat(location + "/" + filename).st_size
sftp_archive_e_size_mapping[filename] = sftp.stat(location + "/" + filename).st_size
# Time Taken : 5 min+
sftp_archive_d_size_mapping[filename] = 1 #sftp.stat(location + "/" + filename).st_size
sftp_archive_e_size_mapping[filename] = 1 #sftp.stat(location + "/" + filename).st_size
# Time Taken : 20-30 s
如果我注释 sftp.stat(location + "/" + filename).st_size
并分配静态值 运行 整个代码只需要 20-30 秒。我正在寻找一种方法如何优化时间并获取文件大小的详细信息。
Connection.listdir_attr
已经为您提供了 SFTPAttributes.st_size
中的文件大小。
无需为每个文件调用 Connection.stat
来获取大小(再次)。
另请参阅: