Python 如何从位置参数递增文件名?
当文件名Python 如何从位置参数递增文件名?,python,python-3.x,Python,Python 3.x,当文件名“test.wav”已经存在时,如何修改此函数以增加名称 def write_float_to_16wav(signal, name = "test.wav", samplerate=20000): signal[signal > 1.0] = 1.0 signal[signal < -1.0] = -1.0 intsignal = np.int16((2**15-1)*signal) siow.write(name,samplerate,in
“test.wav”
已经存在时,如何修改此函数以增加名称
def write_float_to_16wav(signal, name = "test.wav", samplerate=20000):
signal[signal > 1.0] = 1.0
signal[signal < -1.0] = -1.0
intsignal = np.int16((2**15-1)*signal)
siow.write(name,samplerate,intsignal)
def write_float_to_16wav(信号,name=“test.wav”,samplerate=20000):
信号[信号>1.0]=1.0
信号[信号<-1.0]=-1.0
intsignal=np.int16((2**15-1)*信号)
siow.write(名称、采样器、输入信号)
您可以使用os.path.exists
检查文件是否存在,并在需要时递增:
import os.path
if os.path.exists(name):
name_, ext = os.path.splitext(name)
name = f'{name_}1{ext}'
# For <3.6: '{name_}1{ext}'.format(name_=name_, ext=ext)
主要有两种选择。第一个(可能更好的)选项是简单地计算已经创建的wav文件的数量
num_waves_created = 0
def write_float_to_16wav(signal, name = "test.wav", samplerate=20000):
signal[signal > 1.0] = 1.0
signal[signal < -1.0] = -1.0
intsignal = np.int16((2**15-1)*signal)
name = "test" + str(num_waves_created) + ".wav"
siow.write(name,samplerate,intsignal)
num_waves_created += 1
num\u waves\u created=0
def写入浮点数到16wav(信号,name=“test.wav”,samplerate=20000):
信号[信号>1.0]=1.0
信号[信号<-1.0]=-1.0
intsignal=np.int16((2**15-1)*信号)
name=“test”+str(num_waves_created)+“.wav”
siow.write(名称、采样器、输入信号)
创建的波数+=1
第二个选项是每次在函数中测试文件是否已经创建。这包含了一个以线性复杂度运行的while循环,因此它对于10个wav文件来说足够有效,但是如果需要创建更多的wav文件,它会严重减慢速度
from os import path
def write_float_to_16wav(signal, name = "test.wav", samplerate=20000):
new_path = False
while (!new_path):
if path.exists(name):
break
else:
name_, ext = os.path.splitext(name)
name = f'{name_}1{ext}'
signal[signal > 1.0] = 1.0
signal[signal < -1.0] = -1.0
intsignal = np.int16((2**15-1)*signal)
siow.write(name,samplerate,intsignal)
从操作系统导入路径
def写入浮点数到16wav(信号,name=“test.wav”,samplerate=20000):
新路径=错误
而(!新建路径):
如果路径存在(名称):
打破
其他:
name,ext=os.path.splitext(name)
name=f'{name}1{ext}'
信号[信号>1.0]=1.0
信号[信号<-1.0]=-1.0
intsignal=np.int16((2**15-1)*信号)
siow.write(名称、采样器、输入信号)
根据您提供的有限代码确定,并假设您尚未验证文件名是否存在于其他地方:
1) 检查您的文件名是否已存在(请参阅)
2) 如果路径/文件名已存在,请提取当前路径/文件名(请参阅),否则文件名=test.wav
3) 从当前文件名中提取最后一个递增的值(使用拆分或子字符串或任何最合适的方式)
4) 用递增的值设置新文件名(参见heemayl的答案)
5) 完成。是否希望例如test1.wav作为递增名称?@ScottishUser是的,完全正确。首先,您需要确定它实际上已经存在。正如确定这一点不是
siow.write
的工作,也不是write\u float\u to\u 16wav
的工作;这是任何调用write\u float\u to\u 16wav
的人的工作。
from os import path
def write_float_to_16wav(signal, name = "test.wav", samplerate=20000):
new_path = False
while (!new_path):
if path.exists(name):
break
else:
name_, ext = os.path.splitext(name)
name = f'{name_}1{ext}'
signal[signal > 1.0] = 1.0
signal[signal < -1.0] = -1.0
intsignal = np.int16((2**15-1)*signal)
siow.write(name,samplerate,intsignal)