Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从位置参数递增文件名?_Python_Python 3.x - Fatal编程技术网

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)