2016-10-17 20 views
0

我要插入通过glob.glob得到的各文件名之前的文件的名称的序列,所以可以通过将它们分类成INTRO + VIDEO + OUTRO将它们连接起来,通过FFMPEG,该文件必须遵循这样的顺序:的Python - 下面就TXT插入线,而不覆盖

插入的文件名
FILE
插入的文件名
插入的文件名
FILE
插入的文件名
插入的文件名
FILE
插入的文件名

这是这段代码我使用:

import glob 
open("Lista.txt", 'w').close() 
file = open("Lista.txt", "a") 
list =glob.glob("*.mp4") 
for item in list: 
    file.write("%s\n" % item) 
file.close() 

f = open("Lista.txt", "r") 
contents = f.readlines() 
f.close() 

for x,item in enumerate(list): 
    contents.insert(x, "CTA\n") 
f = open("Lista.txt", "w") 
contents = "".join(contents) 
f.write(contents) 
print f 
f.close() 

但我得到错误的顺序值:

插入的文件名
插入的文件NAME
插入的文件名
FILE
FILE
FILE

我怎么能解决这个问题? 编辑:正如指出的那样,也许问题正通过修改我目前使用的清单引起的。

+0

想想会发生什么情况的指标当你在他们之前插入一个新的项目时,现有的项目,当你迭代它时改变列表的长度是一个坏主意。 – jonrsharpe

+0

请不要像你一样使用'list'作为变量。它影响buildin函数/类'列表'。重命名它。同样是'file'。 –

回答

1

您试图修改contents列表。我认为如果使用新列表来获得最终输出,那么它将变得简单并且更具可读性,如下所示。并且作为Python的禅状态

简单总比复杂好。

  1. 考虑你做glob.glob后,如下得到file_list

file_list中= [ “a.mp4”, “b.mp4”, “c.mp4”]

  • 现在要添加“ INSERTFILE“前后的file_list每个元素之后,使得final_list将看起来像
  • final_list = [ '的insertFile', 'a.mp4', '的insertFile', '的insertFile', 'b.mp4' ,'INSERTFI LE”, '的insertFile', 'c.mp4', '的insertFile']

  • 这final_list你将写入文件。
  • 问题概要是如何实现步骤2。

    下面的代码将获得第2步

    代码(有评论在线:

    #File List from glob.glob 
    file_list = ["a.mp4","b.mp4","c.mp4"] 
    #File to be added 
    i = "INSERTFILE" 
    final_list = [] 
    for x in file_list: 
        #Create temp_list 
        temp_list = [i,x,i] 
        #Extend (not append) to final_list 
        final_list.extend(temp_list) 
        #Clean temp_list for next iteration 
        temp_list = [] 
    print (final_list) 
    

    输出:

    C:\Users\dinesh_pundkar\Desktop>python c.py 
    ['INSERTFILE', 'a.mp4', 'INSERTFILE', 'INSERTFILE', 'b.mp4', 'INSERTFILE', 'INSERTFILE', 'c.mp4', 'INSERTFILE'] 
    
    +1

    你是对的!谢谢,这是事实,我沉溺于复杂性,一个简单的解决方案将是最好的,这只是我是一个Python新手,我想不出一个简单的解决方案。 –