Увеличьте имя файла, чтобы избежать перезаписи существующего файла - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь научить себя Python, и у меня есть простая программа, которая записывает звук и отправляет его в выходной файл. Я не могу понять, как именно увеличивать файл каждый раз, когда я запускаю его, чтобы избежать перезаписи предыдущего (output1.wav, output2.wav, et c). Это кажется простым, но, как я уже сказал, я очень плохо знаком с Python и не могу заставить его работать.

import os
import sounddevice as sd
from scipy.io.wavfile import write


os.chdir(r'C:\Path') 
fs = 44100 
seconds = 20 
myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=2)
sd.wait() 

write('output.wav', fs, myrecording)  

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Увеличение и запись следующего доступного числа несколько раз заканчивается тем, что это операция O (n ^ 2), которая может быть очень медленной для больших коллекций.

Что если вы используете вместо этого UUID? Это просто, это O (n), и это очень маловероятно, чтобы вызвать столкновение: https://docs.python.org/3/library/uuid.html#example

0 голосов
/ 25 февраля 2020

Сначала вы должны выяснить, каким был последний файл, который вы написали, а затем увеличить его на единицу и сгенерировать новое имя файла:

import glob 
import re

files=glob.glob("Output*.wav")
print(files)
numbers = [int(re.search("Output(\d+).wav", s).group(1)) for s in files]
next_num = max(numbers)+1
print(numbers)
new_filename = f"Output{next_num}.wav"
print(new_filename)

Я использовал поиск по регулярному выражению из библиотеки re извлечь номер файла.

...