使用Python执行命令上的每个文件的一个文件夹
题
我试图建立一个Python脚本,将:
- 看到文件夹"/input"
- 每个视频文件夹中,运行mencoder命令(代码转换他们的东西可以在我的电话)
- 一旦mencoder已经完成了他的运行,删除原来的视频。
这似乎并不太难,但我吸python:)
任何想法什么脚本应该看起来像什么?
奖金的问题:我应该使用
操作系统。系统
或
子流程.呼叫
?
子流程.呼叫似乎允许对一个更加可读剧本,因为我可以写下命令:
命令行=['mencoder', sourceVideo, '-孤儿和易受感染儿童', "复制", '-华侨', "复制", '-ss, '00:02:54', '-endpos', '00:00:54', '-o', destinationVideo]
编辑:Ok,工作:
import os, subprocess
bitrate = '100'
mencoder = 'C:\\Program Files\\_utilitaires\\MPlayer-1.0rc2\\mencoder.exe'
inputdir = 'C:\\Documents and Settings\\Administrator\\Desktop\\input'
outputdir = 'C:\\Documents and Settings\\Administrator\\Desktop\\output'
for fichier in os.listdir(inputdir):
print 'fichier :' + fichier
sourceVideo = inputdir + '\\' + fichier
destinationVideo = outputdir + '\\' + fichier[:-4] + ".mp4"
commande = [mencoder,
'-of',
'lavf',
[...]
'-mc',
'0',
sourceVideo,
'-o',
destinationVideo]
subprocess.call(commande)
os.remove(sourceVideo)
raw_input('Press Enter to exit')
我已经删除了mencoder命令,为了清晰起见并且因为我仍在努力。
感谢大家对你的输入。
解决方案
找到所有名称的使用 os.listdir()
.
然后你回路过的文件名。像这样:
import os
for filename in os.listdir('dirname'):
callthecommandhere(blablahbla, filename, foo)
如果你更喜欢子流程,使用子流程.:-)
其他提示
使用 操作系统。走路 迭代过递归的目录内容:
import os
root_dir = '.'
for directory, subdirectories, files in os.walk(root_dir):
for file in files:
print os.path.join(directory, file)
没有真正的差异之间的操作系统。系统和子进程的.呼叫这里-除非你要处理的奇怪的命名的文件(文件,包括空间,引号,等等)。如果是这种情况下,子流程.呼叫绝对是更好的,因为你不需要做任何壳引用文件的名称。操作系统。系统是好的,当你需要接受任何有效的命令,例如从收到的用户配置文件。
蟒蛇可能被矫枉过正,这一点。
for file in *; do mencoder -some options $file; rm -f $file ; done
AVI
要 MPG
(挑选你的扩展):
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
或者你可以使用的操作系统。路径。行走功能,其做更多的工作对你不仅仅是操作系统。走:
一个愚蠢的例子:
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)
我有一个类似的问题,有很大的帮助,从网上和此后我做了一个小的应用程序,我的目标是VCD和功能全面的,我不要删除的来源,但我认为它将会很容易地适应自己的需要。
它可以转换1个视频切或可以将所有的视频文件夹中,重新命名,并把它们放在一个子文件夹/VCD
我还添加了一个小型接口,希望其他人发现它很有用!
我把代码和文件,在这里顺便说一句: http://tequilaphp.wordpress.com/2010/08/27/learning-python-making-a-svcd-gui/