【问题标题】:Increment a Filename to Avoid Overwriting Existing File增加文件名以避免覆盖现有文件
【发布时间】:2020-02-24 20:53:42
【问题描述】:

我正在尝试自学 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)  

【问题讨论】:

标签: python increment


【解决方案1】:

您首先必须找出您写入的最后一个文件是什么,然后将其加一并生成新文件名:

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 库中的正则表达式搜索来提取文件编号。

【讨论】:

    【解决方案2】:

    多次递增和写入下一个可用数字最终成为 O(n^2) 操作,这对于大型集合可能会变得非常慢。

    如果您改用 UUID 会怎样?这很简单,它是 O(n) 并且极不可能引起碰撞: https://docs.python.org/3/library/uuid.html#example

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2015-07-10
      • 2011-02-09
      • 2014-11-27
      相关资源
      最近更新 更多