skip to Main Content

I am trying to automate a program in Python that runs in terminal on Ubuntu.

I have a lot of files in my directory, and each file has a sister file associated with it, all in the same directory. The names of the files start with 1 and go all the way up to 500.

For example, there will be files like 1.mp3, 1_hello.mp4, 1_something.mp4, 1_something_else.mp3 and 2.mp3, 2_hello.mp4, 2_something.mp4, 2_something_else.mp3.
I will be only concerned with 1.mp3, and 1_hello.mp4, and similarly for all the other files in my directory. Other files with the same suffix don’t matter to me. How can I automate this? I have tried this but, it doesn’t work.

import os
directory_name = '/home/user/folder/'
for file_name in os.listdir(directory_name):
    if file_name.endswith(".mp3"):
        for sis_file in os.listdir(directory_name):
            if sis_file.endswith("file_name._hello.mp4"):
                os.system("command file_name -a file_name.sis_file file_name.new_file")

The command is written in the os.system line. new_file is created as the result of this operation, and it too must have the suffix of the original file for it to be easily identifiable. Also, for the command in os.system, each file must only be paired only with its sister file, or I will get inconsistent results.

Edit: I will a lot of files in my directory. All the files are sequentially numbered, begining from 1. Each file has many other files associated with it, and all these sister files will have same prefix as that of the parent file. The command that I have to automate is like this

command name_of_the_parent_file.mp3 -a name_of_the_sister_file.txt name_of_the_output_file.mp4

name_of_the_parent_file would be like 1.mp3, 2.mp3, 3.mp3
name_of_the_sister_file would be like 1_hello.txt, 2_hello.txt
name_of_the_output_file would be the name of the new file that this command creates.

2

Answers


  1. this is what I gathered from your question.

    from glob import glob
    import re
    
    path = glob("/home/testing/*") # your file path here
    individual_files = [list(map(int, re.findall(r'd+', x)))[0] for x in path]
    individual_files
    set_files = list(set(individual_files))
    set_files
    for i in set_files : 
        files = [path[id] for id, x in enumerate(individual_files) if x == i]
        print(*files, sep = "n")
        print("nn")
    

    the output is separating all the numbered files in the folder:

    /home/testing/1.csv
    /home/testing/1_something_else.csv
    /home/testing/1_something.csv
    
    
    
    /home/testing/2_something.csv
    /home/testing/2_something_else.csv
    /home/testing/2.csv
    
    
    
    /home/testing/11_something.csv
    /home/testing/11_something_else.csv
    /home/testing/11.csv
    
    
    
    /home/testing/111.csv
    /home/testing/111_something.csv
    /home/testing/111_something_else.csv
    /home/testing/111_testing.txt
    
    
    Login or Signup to reply.
  2. If I get you right you need to run this command on all parent files combined with all paired children files individually:

    import os
    from glob import glob
    
    files = glob('/home/user/folder/*.*') #get a list of files in the folder
    parent_files = [i for i in files if i.rsplit('.', -1)[0].isdigit()] #get parent files by filtering filenames with a digit as filename
    
    for file in parent_files:
        for j in [i for i in files if i.startswith(f"{file.rsplit('.', -1)[0]}_")]: #run command on those files that start with the same digit as the parent files
            os.system(f"command {file} -a {j} {j.rsplit('.', -1)[0]}.extension") # I have no idea what the output file should look like, so I named it after the children file with a random extension
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search