다음은 caffe train_list.txt를 생성하는 Python 스크립트를 공유하는 방법입니다. 좋은 참조 값이 있으며 모든 사람에게 도움이 되기를 바랍니다. 함께 살펴보겠습니다
먼저 코드를 제공하세요:
import os path = "/home/data//" path_exp = os.path.expanduser(path) classes = [int(p) for p in os.listdir(path_exp)] classes.sort() # nrof_classes一个数据集下有多少个文件夹,就是说有多少个人,多少个类别 nrof_classes = len(classes) count=0 files = open("train_list.txt",'w') filets = open("test_list.txt",'w') count_u=0 for i in range(nrof_classes): class_name = str(classes[i]) count=count+1 count_u=count_u+1 facedir = os.path.join(path_exp, class_name) prefix1 = path+class_name+"/" if os.path.isdir(facedir): images = os.listdir(facedir) #print(images[0]) image_paths = [(prefix1+img+" "+class_name+"\n") for img in images] #print(image_paths[0]) if count < 0.8*nrof_classes: if len(image_paths)>4: test_path=[] for x in range(2): test_path.append(image_paths[0]) del image_paths[0] filets.writelines(test_path) files.writelines(image_paths) #if count==2: # break #imgae_pathses = [] #防止图像大小为0 #for x in image_paths: # if os.path.getsize(x)>0: # imgae_pathses.append(x) #if len(imgae_pathses)==0: # os.rmdir(facedir) files.close() filets.close()
python에서 os 모듈의 유용한 사용법:
0 이름 바꾸기: 파일과 폴더는 모두 하나의 명령입니다:
os. origin_dir,new_dir)
1 파일 작업:
os.mknod("test.txt") 빈 파일 만들기
fp = open("test.txt",w) 다음과 같은 경우 파일을 직접 엽니다. 파일이 없으면 파일을 생성하세요
열기 모드 정보:
w 쓰기 모드로 열기,
a 추가 모드로 열기(EOF에서 시작, 필요한 경우 새 파일 생성)
r+ 읽기-쓰기 모드로 열기
w+ 읽기-쓰기 모드로 열기 열기( w 참조)
a+ 읽기-쓰기 모드로 열기( a 참조)
rb 이진 읽기 모드로 열기
wb 이진 쓰기 모드로 열기( w 참조)
ab 이진 추가 모드로 열기 (a 참조)
rb+ 바이너리 읽기 쓰기 모드로 열기(r+ 참조)
wb+ 바이너리 읽기-쓰기 모드로 열기(w+ 참조)
ab+ 바이너리 읽기-쓰기 모드로 열기(a+ 참조)
fp.read([ size]) #size는 읽은 길이이며, 단위는 바이트입니다.
fp.readline([size]) ~ #줄 읽기, 크기가 정의되어 있으면 줄의 일부만 반환 가능
fp.readlines([size]) 멤버를 선택하고 이 목록을 반환합니다. 실제로 루프에서 readline()을 호출하여 내부적으로 구현됩니다. size 매개변수가 제공되면 size는 읽은 내용의 전체 길이를 나타내며, 이는 파일의 일부만 읽을 수 있음을 의미합니다. Tfp.write (STR) # str을 파일에 쓰고, WRITE()는 행을 추가하지 않습니다. ffp.writelines (SEQ) #뒤에 STR 행이 모두 한꺼번에 기록됩니다. 이 함수는 또한 각 줄 뒤에 아무것도 추가하지 않고 충실하게 작성합니다. and Python은 더 이상 사용되지 않는 파일을 자동으로 닫습니다. 그러나 이 기능은 보장되지 않습니다. 직접 닫는 습관을 기르는 것이 가장 좋습니다. 파일을 닫은 후 작업하면 ValueError가 발생합니다.
fp.flush() #긴 정수 "파일 태그" 반환
fp.isatty() > 파일의 시작 부분 원산지
fp.next() 다음 줄로 이동하고 파일 작업 플래그를 다음 줄로 이동합니다. for...in file과 같은 문에서 파일이 사용되면 순회를 구현하기 위해 next() 함수가 호출됩니다.
fp.seek(offset[,whence]) #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
fp.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
也可以直接打开式的新建文件:
with open('path0.txt','ab') as f: for d in arr: np.savetxt(f,d,fmt='%5f')
path0.txt将直接在python脚本所在目录新建
arr是shape是height x width x channel的numpy数组,注意,这里这么写是因为numpy一次只能够保存一个height x width维度的数据
2 新建、删除文件夹
新建:os.makedirs()
比如windows下新建E:\\dir\\subdir\\
os.makedirs('E:\\dir\\subdir\\') 或者 os.makedirs('E:/dir/subdir/')
ubuntu下新建就是os.makedirs('/home/dir/subdir/')
复制文件:
shutil.copyfile("oldfile","newfile") oldfile和newfile都只能是文件
shutil.copy("oldfile","newfile")oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
复制文件夹:
shutil.copytree("olddir","newdir")olddir和newdir都只能是目录,且newdir必须不存在
重命名文件(目录)
os.rename("oldname","newname") 文件或目录都是使用这条命令
移动文件(目录)
shutil.move("oldpos","newpos")
删除文件
os.remove("file")
删除目录
os.rmdir("dir")只能删除空目录
shutil.rmtree("dir")空目录、有内容的目录都可以删
转换目录
os.chdir("path") 换路径
获取文件大小:os.path.getsize(filename)
3 需要注意的是,在ubuntu下有可能路径包括~,因此需要展开,展开使用:
path_exp = os.path.expanduser(nam)
4 还有一种情况,路径相连,需要将一级一级的目录连接起来,os会自动处理层级目录之间的/,比如,将目录/home 和 数据 1之间连接起来:
os.path.join('/home', str(1)),
后面也可以为文件名,是一样的用法
5 路径存在:用于判断目录是否存在
a = os.path.exists(dir)
存在返回True,否则False
6 获取目录列表,就是给出的目录下的文件或目录列表:
classes = os.listdir(path_exp)
获得的是path_exp下的所有文件的列表,包含目录和文件,
os.path.dirname(path) #返回文件路径,或者是给定路径去掉最后一个目录后的路径,
还有一种使用方式是用在文件中:
os.path.dirname(__file__)用于获取所在文件的路径
7 运行shell命令: os.system():
ubuntu下:os.system(‘pwd')
Python脚本工作的目录路径: os.getcwd()
读取和设置环境变量:os.getenv() 与os.putenv()
给出当前平台使用的行终止符:os.linesep Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'
指示你正在使用的平台:os.name 对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'
创建多级目录:os.makedirs(r“c:\python\test”)
创建单个目录:os.mkdir(“test”)
获取文件属性:os.stat(file)
修改文件权限与时间戳:os.chmod(file)
终止当前进程:os.exit()
更全面的os.path用法:
os.path.abspath(path) #返回绝对路径
os.path.basename(path) #返回文件名
os.path.basename('E:abc.jpg')
'c.jpg'
os.path.commonprefix(list) # 목록에 있는 모든 경로의 공통 접두사를 반환합니다(여러 경로 ) 가장 긴 경로입니다.
os.path.dirname(path) #파일 경로를 반환
os.path.exists(path) #경로가 존재하면 True를 반환, 경로가 손상되면 False를 반환
os.path.lexists #경로가 존재하면 True를 반환 , 경로가 손상된 경우 반환 True
os.path.expanduser(path) # 경로에 포함된 "~" 및 "~user"를 사용자 디렉터리
os.path.expandvars(path)로 변환 # " 환경변수 name"과 "${name}"
os.path.getatime(path)의 값에 따라 경로에 포함된 $" #이 경로가 마지막으로 입력된 시간을 반환합니다.
os.path.getmtime(path) # 이 경로에서 마지막 수정 시간을 반환합니다.
os.path.getctime(path) # 경로의 크기를 반환합니다.
os.path.getsize(path) # 파일 크기를 반환합니다. 파일이 없으면 오류를 반환합니다.
os.path.isabs(path) #절대경로인지 확인
os.path.isfile(path) #경로가 파일인지 확인
os.path.isdir(path) #경로가 디렉터리인지 확인
os.path.islink (경로) #경로가 링크
os인지 확인합니다. path.ismount(path) #경로가 마운트 지점인지 확인합니다. ()
os.path.join(path1[, path2[, ...]] ) #디렉토리와 파일 이름을 하나의 경로로 결합
os.path .normcase(path) #path
os.path.normpath(path)의 대소문자와 슬래시 변환 #경로 문자열 정규화 form
os.path.realpath (path) # path
os.path.relpath의 실제 경로를 반환합니다. (path[, start]) # start
os.path.samefile(path1, path2)에서 상대 경로를 계산합니다. # 디렉터리인지 파일인지 판단합니다. same
os.path.sameopenfile(fp1, fp2) #fp1과 fp2가 동일한 파일을 가리키는지 여부를 판단
os.path.samestat(stat1, stat2) #상태 튜플 stat1과 stat2가 동일한 파일을 가리키는지 확인
os.path.split(path) # 경로를 dirname과 basename으로 분할하고 튜플을 반환합니다. :
os.path.split('E:abc.jpg')
'E:\a\b ','c.jpg'
os.path.splitdrive(path) #Windows에서 일반적으로 사용되며, 드라이브 이름과 경로의 튜플을 반환합니다
os.path.splitext(path) #경로를 분할하고 경로 이름과 경로의 튜플을 반환합니다. 파일 확장자
os.path.split('E:abc.jpg')
'E:\a\b\c','.jpg'
os.path.splitunc(경로) #경로를 로딩 지점과 파일로 분할
os.path.walk(path, Visit, arg) # 각 디렉터리에 들어갈 때 경로를 탐색하고 방문 함수를 호출합니다. 방문 함수에는
3개의 매개변수(arg, dirname)가 있어야 합니다. , names) dirname은 현재 디렉터리의 디렉터리 이름을 나타내고 names는 현재 디렉터리의 모든
파일 이름을 나타냅니다. args는 walk
os.path.supports_unicode_filenames #유니코드 경로 이름 지원 여부를 설정합니다
위 내용은 Python 스크립트를 사용하여 caffe train_list.txt를 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!