我正在尝试自学Python,我有一个简单的程序来记录一些音频并将其发送到输出文件。为了避免覆盖前一个文件(output1.wav,output2.wav等),我似乎无法确切地知道每次运行该文件时如何递增文件。看起来很简单,但是正如我说的那样,我对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)
答案 0 :(得分:0)
首先,您必须找出写入的最后一个文件,然后将其递增一个并生成新的文件名:
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
库中的正则表达式搜索来提取文件号。
答案 1 :(得分:0)
多次递增和写入下一个可用数字最终会导致O(n ^ 2)操作,这对于大型集合可能会非常慢。
如果您改用UUID怎么办?很简单,它是O(n)并且极不可能引起碰撞: https://docs.python.org/3/library/uuid.html#example