1.需求:现在我有一些文件,结构如下,共有三级目录,

我想得到一个kinetics400_val_list.txt文件,里面的内容就是
abseiling/0wR5jVB-WPK.txt 0
archery/shana.txt 1
baby_waking_up/jsdjhf-s.txt 2
也就是说每一行结构类似:
二级目录名/三级文件名 遍历二级文件夹时的编号2.实现:在一级目录内新建一个generate_file_name.py文件,

代码为:
import os
spath = './kinetics400_val_list.txt'
filePath = './val/'
# 获取一级目录下的所有文件名
directories = os.listdir(filePath)
for i in range(len(directories)):
directory = directories[i]
# 获取二级目录下的所有文件名
file_names = os.listdir('./val/'+directory)
for file_name in file_names:
# 拼接字符串
str_row = directory + '/' + file_name + ' ' + str(i)
# 可选[删除/后面以_或是-开头的这两种字符(夹杂在数字、字母字符中的不算),因为我之前在网络下载了一个kinetics400_val_list.txt
# ,txt里面的内容/后面是有-或者_打头,但是我实际的val验证集里面的视频文件都把-或_打头去掉的,所以我在处理kinetics400_val_list.txt
# 这个txt的时候需要去掉-和_打头]
# 但是因为我们是直接读取视频名,并生成kinetics400_val_list.txt文件,那么kinetics400_val_list.txt文件中的内容和视频名称
# 必然是一一对应的,就没必要删除/后面的_和-了,但是加了这个代码也不影响
index = str_row.rfind("/") + 1
head = str_row[:index]
tail = str_row[index:]
# lstrip这个函数会去除某个种类的开头字符,比如假设此时tail为--_shopp_ing.mp4
tail = tail.lstrip('_')
tail = tail.lstrip('-')
# 那么运行完这两句之后,tail为shopp_ing.mp4,中间的_并不会被删除
# 同样的,还有strip,rstrip,
cope_line = head + tail
with open(spath, 'a') as f:
f.write(cope_line + '\n')strip具体可以看这篇文章
然后,我这边就可以跑啦

版权声明:本文为a_cherry_blossoms原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。