2016-10-17 21 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新手,我想不出一個簡單的解決方案。 –