#python #video #ffmpeg
#python #Видео #ffmpeg
Вопрос:
Я хочу вставить имя файла перед каждым именем файла, полученным через glob.glob, чтобы я мог объединить их через FFMPEG, отсортировав их по INTRO VIDEO OUTRO, файлы должны следовать этому порядку:
ВСТАВЛЕННОЕ ИМЯ ФАЙЛА ВСТАВЛЕННОЕ ИМЯ
ФАЙЛА
ВСТАВЛЕННОЕ ИМЯ ФАЙЛА ВСТАВЛЕННОЕ ИМЯ
ФАЙЛА ВСТАВЛЕННОЕ ИМЯ ФАЙЛА ВСТАВЛЕННОЕ ИМЯ
ФАЙЛА
ВСТАВЛЕННОЕ
ИМЯ ФАЙЛА ФАЙЛ
ВСТАВЛЕННОЕ ИМЯ ФАЙЛА
Это тот код, который я использую:
import glob
open("Lista.txt", 'w').close()
file = open("Lista.txt", "a")
list =glob.glob("*.mp4")
for item in list:
file.write("%sn" % item)
file.close()
f = open("Lista.txt", "r")
contents = f.readlines()
f.close()
for x,item in enumerate(list):
contents.insert(x, "CTAn")
f = open("Lista.txt", "w")
contents = "".join(contents)
f.write(contents)
print f
f.close()
Но я получаю значения в неправильном порядке:
ВСТАВЛЕННОЕ ИМЯ ФАЙЛА
ВСТАВЛЕННОЕ ИМЯ
ФАЙЛА ВСТАВЛЕННОЕ ИМЯ ФАЙЛА
ФАЙЛ
ФАЙЛ
ФАЙЛ
Как я мог это решить? РЕДАКТИРОВАТЬ: как указывалось, возможно, проблема вызвана изменением списка, который я сейчас использую.
Комментарии:
1. Подумайте о том, что происходит с индексами существующих элементов, когда вы вставляете перед ними новый элемент. В общем, изменять длину списка во время итерации по нему — плохая идея.
2. Пожалуйста, не используйте
list
в качестве переменной, как вы делаете. Это затеняет функцию / класс buildinlist
. Переименуйте его. То же самое дляfile
.
Ответ №1:
Вы пытаетесь изменить contents
список. Я думаю, что если для получения конечного результата используется new list, то он будет простым и более читаемым, как показано ниже. И, как утверждает Zen of Python
Простое всегда лучше, чем сложное.
- Считайте, что вы получили
file_list
, как показано ниже, после выполненияglob.glob
.
file_list = [«a.mp4», «b.mp4», «c.mp4»]
- Теперь вы хотите добавить «
INSERTFILE
» до и после каждого элементаfile_list
, чтобы final_list выглядел как
final_list = [‘INSERTFILE’, ‘a.mp4’, ‘INSERTFILE’, ‘INSERTFILE’, ‘b.mp4’, ‘INSERTFILE’, ‘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:Usersdinesh_pundkarDesktop>python c.py
['INSERTFILE', 'a.mp4', 'INSERTFILE', 'INSERTFILE', 'b.mp4', 'INSERTFILE', 'INSERTFILE', 'c.mp4', 'INSERTFILE']
Комментарии:
1. Вы абсолютно правы! спасибо, это правда, что я переборщил со сложностью, простое решение было бы лучшим, просто я новичок в Python, и я не мог придумать простого решения.