Maison >développement back-end >Tutoriel Python >Comment générer caffe train_list.txt à l'aide d'un script python

Comment générer caffe train_list.txt à l'aide d'un script python

不言
不言original
2018-04-28 14:57:512348parcourir

Ce qui suit est un script python pour partager avec vous comment générer caffe train_list.txt. Il a une bonne valeur de référence et j'espère qu'il sera utile à tout le monde. Jetons un coup d'oeil ensemble

Donnons d'abord le code :

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()

Quelques utilisations utiles du module os sous python :

0 Renommer : les fichiers et les dossiers sont une seule commande :

os.rename(original_dir,new_dir)

1 fichier Opération :

os.mknod("test.txt") Créer un fichier vide
fp = open("test.txt",w) Ouvrir directement un fichier, si le fichier le fait non S'il existe, créez le fichier

A propos du mode ouverture :

w Ouvrir en mode écriture,
a Ouvrir en mode ajout (démarrer depuis EOF, créer un nouveau fichier si nécessaire )
r+ Avec Ouvrir en mode lecture-écriture
w+ Ouvrir en mode lecture-écriture (voir w)
a+ Ouvrir en mode lecture-écriture (voir a)
rb Ouvrir en mode lecture binaire
wb Ouvrir en mode écriture binaire (voir w )
ab Ouvrir en mode ajout binaire (voir a )
rb+ Ouvrir en mode lecture-écriture binaire (voir r+ )
wb+ Ouvrir en lecture-écriture binaire mode (voir w+ )
ab+ Lecture en binaire Le mode écriture est activé (voir a+)

fp.read([size])                    #size est la longueur de la lecture, en octets, si size. est défini, il est possible de renvoyer seulement une partie d'une ligne

fp.readlines([size])                                                                                                                                                                       En fait, il est implémenté en interne en appelant readline() dans une boucle. Si le paramètre size est fourni, size représente la longueur totale du contenu lu, ce qui signifie que seule une partie du fichier peut être lue.

fp.write(str) #Écrivez str dans le fichier, write() n'ajoutera pas de caractère de nouvelle ligne après str Tout le contenu est écrit dans le fichier (plusieurs lignes sont écrites à la fois). Cette fonction écrit également fidèlement, sans rien ajouter après chaque ligne.

fp.close()                           #Fermez le fichier. Python fermera automatiquement un fichier une fois qu'il n'est plus utilisé. Cependant, cette fonction n'est pas garantie. Il est préférable de prendre l'habitude de le fermer vous-même. Si un fichier est opéré après sa fermeture, une ValueError sera générée

fp.flush()                #Renvoyer un entier long Type de "balise de fichier"                    #Renvoyer la position actuelle de la marque d'opération sur le fichier, en prenant le début du fichier comme origine

fp.next()                                                                                                                                                                                          Lorsqu'un fichier est utilisé dans une instruction telle que for...in file, la fonction next() est appelée pour implémenter le parcours.

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) #Renvoyer le chemin le plus long commun à tous les chemins de la liste (plusieurs chemins).
os.path.dirname(path) #Renvoyer le chemin du fichier
os.path.exists(path) #Renvoyer True si le chemin existe, False si le chemin est endommagé
os.path.lexists # Renvoie si le chemin existe True, si le chemin est endommagé, il retournera également True
os.path.expanduser(path) #Convertir les "~" et "~user" contenus dans le chemin dans le répertoire utilisateur
os.path.expandvars(path) #Selon l'environnement La valeur de la variable remplace les "$name" et "${name}" contenus dans le chemin
os.path.getatime(path) #Renvoyer le heure à laquelle ce chemin a été entré pour la dernière fois.
os.path.getmtime(path) #Renvoie l'heure de la dernière modification sous ce chemin.
os.path.getctime(path) #Renvoyer la taille du chemin
os.path.getsize(path) #Renvoyer la taille du fichier si le fichier n'existe pas, renvoyer une erreur
os. path.isabs(path) #Juger s'il s'agit d'un chemin absolu
os.path.isfile(path) #Juger si le chemin est un fichier
os.path.isdir(path) #Juger si le chemin est un répertoire
os .path.islink(path) #Déterminer si le chemin est un lien
os.path.ismount(path) #Déterminer si le chemin est un point de montage ()
os.path.join(path1[, path2 [, ...]]) #Combiner les noms de répertoires et de fichiers en un seul chemin
os.path.normcase(path) #Convertir le cas et des barres obliques du chemin
os.path.normpath(path ) #Forme de chaîne de chemin standard
os.path.realpath(path) #Renvoyer le chemin réel du chemin
os.path.relpath(path[, start]) #Calculer le chemin relatif à partir de start
os .path.samefile(path1, path2) #Déterminer si les répertoires ou les fichiers sont identiques
os.path.sameopenfile(fp1, fp2) #Déterminer si fp1 et fp2 pointent vers le même fichier
os.path.samestat(stat1, stat2 ) #Déterminer si le tuple stat stat1 et stat2 pointent vers le même fichier

os.path.split (path) #Divisez le chemin en dirname et basename, et renvoyez un tuple :
os.path.split('E:abc.jpg')

'E:\ a\b','c.jpg'
os.path.splitdrive(path ) #Généralement utilisé sous Windows, renvoie un tuple du nom du lecteur et du chemin
os.path.splitext(path) #Diviser le chemin , renvoie un tuple de nom de chemin et d'extension de fichier

os.path.split('E:abc.jpg')

'E :\a\b\c','.jpg'

os.path.splitunc(path) #Diviser le chemin en points de chargement et fichiers
os.path.walk(path, visit, arg) #Traversez le chemin et appelez la fonction visit en entrant dans chaque répertoire La fonction visit doit Il y a

3 paramètres (arg, dirname, noms), dirname représente le nom du répertoire du. répertoire actuel, les noms représentent tous les
noms de fichiers dans le répertoire courant, args est le troisième des paramètres de marche

os.path.supports_unicode_filenames #Définir s'il faut prendre en charge les noms de chemin Unicode


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn