从字符串开头减少一个零以读取文件夹的名称



对于处理多个视频,主代码读取视频文件夹。更清楚地说,每个视频都有一个特定的文件夹,在其中,它的帧是存在的。读取每个视频的文件夹名称的代码被设计为以这种风格读取(例如0001,0001,…),但文件夹的名称是这种风格(例如001,002,…)。那么,如何修改代码以与文件夹的名称兼容呢?在读取文件夹名称的以下函数中引发主要错误。如何修改此函数以读取样式为(001)

的文件夹
class Dataset3D(Dataset):
def __init__(self, path_data, len_snippet, size=(224,384), target = False, list_videoName=[]):
self.path_data = path_data 
self.len_snippet = len_snippet 
self.size=(size[1], size[0])
self.target = target
self.list_video_frames=[] #it contains one element for each video; each element is a list of frame names of that video
self.list_video_annt=[] #it contains one element for each video; each element is a list of annt names of that video
self.list_num_frame=[] #it contains one element for each video; each element is the number of frames of that video

print("Init Dataset...")
if len(list_videoName)>0:
self.list_video_name=list_videoName
self.list_video_name=[v for v in self.list_video_name]
self.list_video_name.sort()
elif path_data==os.path.join('data', 'LEDOV'):
self.list_video_name=pd.read_csv(os.path.join(path_data,'train.csv'))['0'].values.tolist()
self.list_video_name=[os.path.splitext(v)[0] for v in self.list_video_name]
self.list_video_name.sort()
else:
self.list_video_name=[d for d in os.listdir(os.path.join(path_data, 'frames')) if os.path.isdir(os.path.join(path_data, 'frames', d))]


for vid in self.list_video_name:
#list of frame names of a single video
list_frame_names=[f for f in os.listdir(os.path.join(path_data, 'frames', vid)) if os.path.isfile(os.path.join(path_data, 'frames', vid, f))]
list_frame_names.sort()

如果我理解正确,问题是如何将数字字符串转换为不同数量的前导零?在这种情况下:

new_string = f"{int(old_string):04d}"

将旧字符串转换为整数,然后将该整数格式化为字符串。04部分表示"通过填充零",使字符串至少有4个字符长。如果你想要一个不同的大小,请将4更改为其他值。

例子:

old_string = "0000100"
f"{int(old_string):04d}".  # "0100"
f"{int(old_string):06d}".  # "000100"
f"{int(old_string):02d}".  # "100", the size 2 is smaller than the number requires, so the output is longer than 2.

相关内容

最新更新