>  기사  >  백엔드 개발  >  Python 스크립트를 사용하여 caffe train_list.txt를 생성하는 방법

Python 스크립트를 사용하여 caffe train_list.txt를 생성하는 방법

不言
不言원래의
2018-04-28 14:57:512294검색

다음은 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(&#39;path0.txt&#39;,&#39;ab&#39;) as f:
    for d in arr:
      np.savetxt(f,d,fmt=&#39;%5f&#39;)

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.