我有以下代码(它改变字符串/文件路径,替换文件名末尾的数字+文件扩展名,并将其替换为"@. ex")
我这样做是因为名字可以用各种方式输入,例如:r_frame.003。Exr(但也)r_12_frame.03.exr等。
import pyseq
import re
#create render sequence list
selected_file = 'H:/test/r_frame1.exr'
without_extention = selected_file.replace(".exr", "")
my_regex_pattern = r"d+b"
sequence_name_with_replaced_number = re.sub(my_regex_pattern, "@.exr" ,without_extention)
mijn_sequences = fileseq.findSequencesOnDisk(sequence_name_with_replaced_number)
如果我打印&;sequence_name_with_replaced_number&;值,这将导致控制台:H:/测试/r_frame@.exr '
当我像这样在函数中使用这个变量时:
mijn_sequences = fileseq.findSequencesOnDisk(sequence_name_with_replaced_number)
那么它不工作。
但是当我手动将最后一行替换为:
mijn_sequences = fileseq.findSequencesOnDisk('H:/test/r_frame@.exr')
那么它工作得很好。(这似乎是相同的值/字符串)但这不是一个可行的选择,代码的全部意义在于让计算机在数千帧内这样做。
有人知道这可能是什么原因吗?
之后,我将执行简单的for循环,遍历该序列中的所有文件。我做这个工作流程的原因是删除。exr文件扩展名之前的数字,并用@符号代替它们。(但忽略所有不在文件名末尾的数字,因此上面的正则表达式。同样,sequence_name_with_replaced_number"变量在控制台中似乎没问题。它吐出:'H:/test/r_frame@.exr'(这是我需要的)
我修复了。正如所述的问题是正确的,每次我从控制台上的变量值进行剪切并将其视为手动输入时,它都会起作用。
然后我对两个值执行len(),结果相差2!发生了什么?控制台添加了"但在生成的变量中,它将这些作为额外的字母添加进去。我通过添加cleaned_sequence = sequence_name_with_replaced_number[1:-1]来修复它,所以'H:/test/r_frame1。exr'(正如控制台显示的那样)与'H:/test/r_frame1 '不同。exr'(我手动插入的,因为我添加了这些标记,在控制台中会自动显示)