Using Python to execute a command on every file in a folder

前端 未结 6 1026
旧时难觅i
旧时难觅i 2020-12-01 01:44

I\'m trying to create a Python script that would :

  1. Look into the folder \"/input\"
  2. For each video in that folder, run a mencoder command (to transcode
相关标签:
6条回答
  • 2020-12-01 02:20

    Python might be overkill for this.

    for file in *; do mencoder -some options $file; rm -f $file ; done
    
    0 讨论(0)
  • 2020-12-01 02:22

    I had a similar problem, with a lot of help from the web and this post I made a small application, my target is VCD and SVCD and I don't delete the source but I reckon it will be fairly easy to adapt to your own needs.

    It can convert 1 video and cut it or can convert all videos in a folder, rename them and put them in a subfolder /VCD

    I also add a small interface, hope someone else find it useful!

    I put the code and file in here btw: http://tequilaphp.wordpress.com/2010/08/27/learning-python-making-a-svcd-gui/

    0 讨论(0)
  • 2020-12-01 02:23

    Use os.walk to iterate recursively over directory content:

    import os
    
    root_dir = '.'
    
    for directory, subdirectories, files in os.walk(root_dir):
        for file in files:
            print os.path.join(directory, file)
    

    No real difference between os.system and subprocess.call here - unless you have to deal with strangely named files (filenames including spaces, quotation marks and so on). If this is the case, subprocess.call is definitely better, because you don't need to do any shell-quoting on file names. os.system is better when you need to accept any valid shell command, e.g. received from user in the configuration file.

    0 讨论(0)
  • 2020-12-01 02:27

    To find all the filenames use os.listdir().

    Then you loop over the filenames. Like so:

    import os
    for filename in os.listdir('dirname'):
         callthecommandhere(blablahbla, filename, foo)
    

    If you prefer subprocess, use subprocess. :-)

    0 讨论(0)
  • 2020-12-01 02:27

    AVI to MPG (pick your extensions):

    files = os.listdir('/input')
    for sourceVideo in files:
        if sourceVideo[-4:] != ".avi"
            continue
        destinationVideo = sourceVideo[:-4] + ".mpg"
        cmdLine = ['mencoder', sourceVideo, '-ovc', 'copy', '-oac', 'copy', '-ss',
            '00:02:54', '-endpos', '00:00:54', '-o', destinationVideo]
        output1 = Popen(cmdLine, stdout=PIPE).communicate()[0]
        print output1
        output2 = Popen(['del', sourceVideo], stdout=PIPE).communicate()[0]
        print output2
    
    0 讨论(0)
  • 2020-12-01 02:27

    Or you could use the os.path.walk function, which does more work for you than just os.walk:

    A stupid example:

    def walk_func(blah_args, dirname,names):
        print ' '.join(('In ',dirname,', called with ',blah_args))
        for name in names:
            print 'Walked on ' + name
    
    if __name__ == '__main__':
        import os.path
        directory = './'
        arguments = '[args go here]'
        os.path.walk(directory,walk_func,arguments)
    
    0 讨论(0)
提交回复
热议问题