如何从位置参数增加文件名?

时间:2019-07-11 17:54:46

标签: python python-3.x

当文件名name已经存在时,如何修改此函数以增加"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)

3 个答案:

答案 0 :(得分:1)

您可以使用|}检查文件是否存在,并在需要时增加:

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) 连接路径:

os.path.join

答案 1 :(得分:0)

有两个主要选项。第一个(可能更好)的选择是简单地计算已经创建的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

第二个选项是每次在函数中测试文件是否已创建。它包含一个while循环,该循环以线性复杂度运行,因此它对于10个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)

答案 2 :(得分:0)

根据您提供的有限代码,并假设您尚未验证文件名是否存在于其他位置,可以:

1)检查您的文件名是否已经存在(请参阅here

2)如果路径/文件名已存在,则提取当前路径/文件名(请参见here),否则文件名= test.wav

3)从当前文件名中提取最后一个递增值(使用split或substring或最合适的方法)

4)用增加的值设置新文件名(请参阅heemayl的答案)

5)完成。