Heim > Artikel > Backend-Entwicklung > So generieren Sie caffe train_list.txt mit einem Python-Skript
Das Folgende ist ein Python-Skript, das Ihnen zeigt, wie Sie caffe train_list.txt generieren. Es hat einen guten Referenzwert und ich hoffe, es wird für alle hilfreich sein. Schauen wir uns das gemeinsam an
Geben Sie zuerst den Code ein:
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()
Einige nützliche Verwendung des Betriebssystemmoduls unter Python:
0 Umbenennen: Dateien und Ordner sind beide ein Befehl:
os.rename(original_dir,new_dir)
1 Dateioperation:
os.mknod("test.txt") Erstellen Sie eine leere Datei
fp = open("test.txt",w) Öffnen Sie direkt eine Datei, wenn die Datei nicht existiert Datei erstellen
Über den Öffnungsmodus:
w Zum Schreiben öffnen,
a Im Anhängemodus öffnen (mit EOF beginnen, bei Bedarf eine neue Datei erstellen)
r+ Zum Lesen öffnen und Schreibmodus offen
w+ Im Lese-/Schreibmodus öffnen (siehe w)
a+ Im Lese-/Schreibmodus öffnen (siehe a)
rb Im binären Lesemodus öffnen
wb Im binären Schreibmodus öffnen (siehe w)
ab Im binären Anhängemodus öffnen (siehe a)
rb+ Im binären Lese- und Schreibmodus öffnen (siehe r+)
wb+ Im binären Lese- und Schreibmodus öffnen (siehe w+)
ab+ Im binären Lese- und Schreibmodus öffnen Öffnen (siehe a+)
fp.read([size]) Wenn die Größe definiert ist, ist es möglich, nur einen Teil einer Zeile zurückzugeben
fp. readlines([size]) Tatsächlich wird es intern durch den Aufruf von readline() in einer Schleife implementiert. Wenn der Größenparameter angegeben wird, stellt die Größe die Gesamtlänge des gelesenen Inhalts dar, was bedeutet, dass nur ein Teil der Datei gelesen werden darf.
fp.write(str) #Str in die Datei schreiben, write() fügt nach str kein Zeilenumbruchzeichen hinzu. Alle Inhalte werden in die Datei geschrieben (mehrere Zeilen werden gleichzeitig geschrieben). Diese Funktion schreibt auch einfach originalgetreu, ohne nach jeder Zeile etwas hinzuzufügen.
fp.close() #Schließen Sie die Datei. Python schließt eine Datei automatisch, wenn sie nicht mehr verwendet wird. Diese Funktion ist jedoch nicht garantiert. Es ist am besten, sich anzuwöhnen, sie selbst zu schließen. Wenn eine Datei bearbeitet wird, nachdem sie geschlossen wurde, wird ein ValueError generiert
fp.flush() der Anfang der Datei als Ursprung Wenn eine Datei in einer Anweisung wie for...in file verwendet wird, wird die Funktion next() aufgerufen, um die Traversierung zu implementieren.
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) #Gibt den längsten Pfad zurück, der allen Pfaden in der Liste gemeinsam ist (mehrere Pfade).
os.path.dirname(path) #Den Dateipfad zurückgeben
os.path.exists(path) #True zurückgeben, wenn der Pfad vorhanden ist, False, wenn der Pfad beschädigt ist
os.path.lexists # Geben Sie zurück, wenn der Pfad vorhanden ist. True, wenn der Pfad beschädigt ist, wird auch True zurückgegeben
os.path.expanduser(path) #Konvertieren Sie die im Pfad enthaltenen „~“ und „~user“ in das Benutzerverzeichnis
os.path.expandvars(path) #Je nach Umgebung. Der Wert der Variablen ersetzt „$name“ und „${name}“, die im Pfad enthalten sind.
os.path.getatime(path) #Gibt den zurück Zeitpunkt der letzten Eingabe dieses Pfades.
os.path.getmtime(path) #Gibt die Zeit der letzten Änderung unter diesem Pfad zurück.
os.path.getctime(path) #Gibt die Größe des Pfads zurück
os.path.getsize(path) #Gibt die Dateigröße zurück. Wenn die Datei nicht existiert, wird ein Fehler zurückgegeben
os. path.isabs(path) #Beurteilen Sie, ob es sich um einen absoluten Pfad handelt
os.path.isfile(path) #Beurteilen Sie, ob der Pfad eine Datei ist
os.path.isdir(path) #Beurteilen Sie, ob Der Pfad ist ein Verzeichnis
os .path.islink(path) #Bestimmen Sie, ob der Pfad ein Link ist
os.path.ismount(path) #Bestimmen Sie, ob der Pfad ein Mount-Punkt ist ()
os.path.join(path1[, path2 [, ...]]) #Kombinieren Sie Verzeichnis- und Dateinamen in einem Pfad
os.path.normcase(path) #Konvertieren Sie die Groß-/Kleinschreibung und Schrägstriche des Pfads
os.path.normpath(path ) #Standard-Pfadzeichenfolgenform
os.path.realpath(path) #Den tatsächlichen Pfad des Pfads zurückgeben
os.path.relpath(path[, start]) #Berechnen Sie den relativen Pfad von Anfang an
os .path.samefile(path1, path2) #Bestimmen Sie, ob die Verzeichnisse oder Dateien gleich sind
os.path.sameopenfile(fp1, fp2) #Bestimmen Sie, ob fp1 und fp2 zeigen auf dieselbe Datei
os.path.samestat(stat1, stat2 ) #Bestimmen Sie, ob das Statistiktupel stat1 und stat2 auf dieselbe Datei verweisen
os.path.split (Pfad) #Teilen Sie den Pfad in Verzeichnisnamen und Basisnamen auf und geben Sie ein Tupel zurück:
os.path.split('E:abc.jpg')
'E:\ a\b','c.jpg'
os.path.splitdrive(path) #Wird im Allgemeinen unter Windows verwendet und gibt ein Tupel aus Laufwerksname und Pfad zurück.
os.path.splitext(path) #Teilt den Pfad , gibt ein Tupel aus Pfadname und Dateierweiterung zurück
os.path.split('E:abc.jpg')
'E :\a\b\c','.jpg'
os.path.splitunc(path) #Teilen Sie den Pfad in Ladepunkte und Dateien auf
os.path.walk(path, visit, arg) #Traverse den Pfad und rufe die Visit-Funktion auf, wenn du jedes Verzeichnis betrittst. Die Visit-Funktion muss
3 Parameter (Arg, Dirname, Namen) enthalten, Dirname stellt den Verzeichnisnamen dar aktuelles Verzeichnis, Namen repräsentiert alle
Dateinamen im aktuellen Verzeichnis, args ist der dritte von walk Parameter
os.path.supports_unicode_filenames #Legen Sie fest, ob Unicode-Pfadnamen
Das obige ist der detaillierte Inhalt vonSo generieren Sie caffe train_list.txt mit einem Python-Skript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!