Copying files from one location of a server to another using python

Question:

Say I have a file that contains the different locations where some '.wav' files are present on a server. For example say the content of the text file location.txt containing the locations of the wav files is this

/home/user/test_audio_folder_1/audio1.wav
/home/user/test_audio_folder_2/audio2.wav
/home/user/test_audio_folder_3/audio3.wav
/home/user/test_audio_folder_4/audio4.wav
/home/user/test_audio_folder_5/audio5.wav

Now what I want to do is that I want to copy these files from different locations within the server to a particular directory within that server, for example say /home/user/final_audio_folder/ and this directory will contain all the audio files from audio1.wav to audio5.wav

I am trying to perform this task by using shutil, but the main problem with shutil that I am facing is that while copying the files, I need to name the file. I have written a demo version of what I am trying to do, but dont know how to scale it when I will be reading the paths of the '.wav' files from the txt file and copy them to my desired location using a loop.

My code for copying a single file goes as follows,

import shutil
original = r'/home/user/test_audio_folder_1/audio1.wav'
target=r'/home/user/final_audio_folder_1/final_audio1.wav'
shutil.copyfile(original,target)

Any suggestions will be really helpful. Thank you.

Asked By: Mohan Singh

||

Answers:

Use the built-in string’s split() method within a for loop on the location.txt contents & split the name of the directory on the ‘/’ character, then the last element in a new list would be your filename.

Answered By: LongW4y

You can use a for loop to read the file paths from the location.txt file and then use the shutil.copyfile() method to copy the files to the target directory. Here is an example:

import shutil

# Original directory containing the files
original_dir = r'/home/user/test_audio_folder_1/'

# Target directory where the files will be copied
target_dir = r'/home/user/final_audio_folder/'

# Read the file paths from the location.txt file
with open('location.txt') as f:
    file_paths = f.readlines()

# Loop through the file paths and copy the files to the target directory
for path in file_paths:
    file_name = path.strip()  # Remove leading and trailing whitespace from the file path
    original_file = original_dir + file_name
    target_file = target_dir + file_name
    shutil.copyfile(original_file, target_file)

This code will read the file paths from the location.txt file and then use the shutil.copyfile() method to copy the files to the /home/user/final_audio_folder/ directory. The files will be copied with their original file names. You can modify the target_file variable to specify custom names for the copied files if desired.

UPDATED:

import shutil

# Open the text file and read the lines containing the file locations
with open('location.txt') as file:
    file_locations = file.readlines()

# Iterate over the file locations and copy each file to the target directory
target_dir = '/home/user/final_audio_folder/'
for i, location in enumerate(file_locations):
    # Strip the newline character from the location string
    location = location.strip()
    # Split the location string into the directory and the file name
    directory, file_name = os.path.split(location)
    # Compute the target file path by concatenating the target directory
    # and the original file name
    target_file = os.path.join(target_dir, file_name)
    # Use shutil.copyfile to copy the file from the original location to the target location
    shutil.copyfile(location, target_file)
Answered By: Ssimo4
import shutil

i=0
with open(r'C:/Users/turing/Desktop/location.txt', "r") as infile:
    for t in infile:
        i+=1
        x="audio"+str(i)+".wav"
        t=t.rstrip('n')
        original= r'{}'.format(t)
        target=r'C:/Users/turing/Desktop/audio_in/' + x
        shutil.copyfile(original, target)
Answered By: Turing101
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.