I am trying to move files into a backup folder which is on the same directory level as the folder where the files are stored. The downloading of the file into a local directory and uploading the file back to the backup folder works but the files can't be deleted from the existing remote folder. I wish to remove the files one by one after each file has been processed instead of storing the paths in a list and removing all at once. I have no idea what is wrong. Hope to seek advice.
Error reading file test_abs_2022135201552.pslog: Bad message
Below is a snippet of the code. I have tested that the 'put' and 'get' part of the code works. The line sftp.remove(file_path) is the one giving problems.
source_path = "/project/"
local_path = r'C:\Users\Desktop\project'
df_staging = pd.DataFrame()
def main():
transport = paramiko.Transport((sftp_host, sftp_port))
transport.connect(username=sftp_username, password=sftp_password)
sftp = paramiko.SFTPClient.from_transport(transport)
global df_staging
try:
main_folders = main_folders = sftp.listdir(source_path)
for main_folder in main_folders:
main_folder = os.path.join(source_path, main_folder)
station_folders = sftp.listdir(main_folder_path) # List the station folder names
# To create a backup folder if it does not exist in remote server
if 'backup' not in sftp.listdir(main_folder_path):
sftp.mkdir(os.path.join(main_folder_path, 'backup'))
print("Backup folder created")
# To create family folder if it does not exist in local dir
if main_folder not in os.listdir(local_path):
os.mkdir(os.path.join(local_path, main_folder))
for station_folder in station_folders:
if station_folder != 'backup':
station_folder_path = os.path.join(main_folder_path, station_folder)
remote_files = sftp.listdir(station_folder_path)
local_file_path = os.path.join(local_path, main_folder, file)
remote_backup_path = os.path.join(main_folder_path, 'backup', file)
# Transfer file between remote to local
sftp.get(file_path, local_file_path)
# Transfer file back from local to remote
sftp.put(local_file_path, remote_backup_path)
# Remove file from remote station folder (This line is giving me the errors!!!)
sftp.remove(file_path)
print(f"Done transfering: {file} ")
print("\n")
except Exception as e:
print(f"Error reading file {file}: {str(e)}")
lst_files_to_delete = [path for path in lst_all_files if path not in lst_files_to_transfer]
print("Files to delete:", lst_files_to_delete)
for delete_file_path in lst_files_to_delete:
print(f"Deleting file: {delete_file_path}")
sftp.remove(delete_file_path)
print(f"File deleted successfully")
forloop to reproduce the problem? Do you need thelist_dir,mkdirorput? If not, reduce your code to minimal reproducible example. We are not interested in your whole program. I assume just thegetis useful here, as it shows that thefile_pathis valid. + Can you delete the file usingsftp? If you can, show us equivalent transcript of thesftpsession, with the same paths as your code is using.