Estudio a fondo [1] ensayos: el nombre del archivo en la misma carpeta y el contenido del txt se lee y se guarda como un archivo CSV

En primer lugar, se extrae el uso os.listdir () todos los nombres de archivo en la carpeta y, a continuación, extraer el nombre del archivo tiene una extracción .txt, con el archivo txt abierto abierto.

import pandas as pd
import numpy as np
from  pandas import DataFrame as df
import os
import math
import keras
'''第一部分,生成train和val的csv文件,方便从中读取图片数据'''
root=r'C:\Users\liulu\Desktop\huaweicloud\file\train_data\train_data'
os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表
files=os.listdir(root)
files

para el archivo de los archivos: # Las dos primeras líneas: '... 'img_1.jpg', img_1.txt
' ''
categoría en txt documento, la forma:. img_101.jpg, 1; cada uno a un archivo txt "" dividida en dos, una primera imagen como un nombre, una segunda categoría como etiqueta
'' '
Imprimir (archivo)
SI' .txt 'en el archivo:
' ''
la función os.path.join (): conectar dos o más nombre de los componentes de trayectos múltiples
1. Si la primera letra del nombre de cada componente no contiene '/', la función agregará automáticamente
2. Si un componente es una ruta absoluta, todos los componentes antes de que se descartarán
3. Si último componente de ruta está vacío, dando como resultado final de un '/' separador de
r +: lectura y escritura, si no existe el archivo será dada
w +: lectura y escritura, si no existe el archivo se creará
'' '
con abierta (os.path.join (raíz, archivo) , 'r +') como f: root \ # archivo ( este archivo es el archivo de nombre de archivo .txt)
línea de f.readline = () # de sólo lectura de cada línea, está a punto de txt contenido de cada archivo y luego leyó los nombres y las etiquetas de la imagen extraída
nombre de archivo = STR (Line) .split ( '') [0]
label = int (STR (Line) .split ( '') [. 1])
Imprimir (filename)
Imprimir (etiqueta)

# 将图片名称与标签两个部分分开到两个列表当中去
df_ = df()
Filename = []  # 图片名称列表
Label = []  # 标签列表
for file in files:
    if '.txt' in file:
        with open(os.path.join(root, file), 'r+') as f:
            line = f.readline() # 每次只读取一行,其实也只有一行
            filename = str(line).split(',')[0]  # 名称
            label = int(str(line).split(' ')[1])  # 标签
            Filename.append(filename)
            Label.append(label)
# print(Filename, Label)   
print(type(Filename), type(Label), len(Filename), len(Label))
df_['FileName']=Filename   # 数据框中添加元素
df_['Label']=Label
df_
# 打乱数据框中的元素,其实frac是指随机抽取行的比例,frac = 0.8就是抽取80%
df_ = df_.sample(frac=1.0)
df_.shape
# 分训练集与验证集
print(df_.shape[0]*0.8)
print(math.ceil(df_.shape[0]*0.8))  # 上取整
df_train = df_.iloc[0:math.ceil(df_.shape[0]*0.8),:]
df_val = df_.iloc[math.ceil(df_.shape[0]*0.8):,:]
print(df_train.shape, df_val.shape)
df_train.head()
# 写入csv, 保存到当前路径下
df_train.to_csv('train.csv', index=None) # 不要行索引 
df_val.to_csv('val.csv', index=None)

En segundo pegote uso se puede adaptar directamente al archivo txt

pegote es un archivo de pitón con sus propias operaciones módulos relacionados, puede utilizarlo para buscar archivos de acuerdo con su finalidad, de forma similar a la búsqueda de archivos de Windows, acciones de apoyo, comodín *,?, [] tres comodín * representa 0 o ,? más caracteres para un carácter, [] coincide con los caracteres del rango especificado, como [0-9] números de los partidos. Los dos métodos principales son las siguientes.

El método principal es a glob módulo glob, que devuelve una lista de todas las rutas de archivo que coincida (Lista); el proceso requiere un parámetro se utiliza para especificar la ruta de combinación de cadena (cadena también puede ser una ruta relativa es absoluto), que devuelve el nombre del archivo incluye sólo el directorio actual en el nombre del archivo, sin incluir subcarpetas dentro.

import glob
glob.glob(r’c:*.txt’)

Obtener todos los archivos txt en la unidad C.

import os
import math
import codecs
import random
import numpy as np
from glob import glob
from PIL import Image
import pandas as pd
train_data_dir = r'C:\Users\liulu\Desktop\huaweicloud\test'
label_files = glob(os.path.join(train_data_dir, '*.txt'))  # 读取文件中所有的txt文件
random.shuffle(label_files)
img_paths = []    #图片完整路径和标签的空列表
labels = []
train_df = pd.DataFrame()
valid_df = pd.DataFrame()
for index, file_path in enumerate(label_files):
    with codecs.open(file_path, 'r', 'utf-8') as f:
        line = f.readline()
#         print(line)  # 读取txt文件中的内容
        line_split = line.strip().split(', ') 
#         print(line_split)
        if len(line_split) != 2:
            print('%s contain error lable' % os.path.basename(file_path))
            continue
        print(line_split)
        img_name = line_split[0]
        label = str(line_split[1]) 
#         print(img_name)
#         print(label)
        img_paths.append(img_name)
        labels.append(label)
#         print(labels)
        
# print(img_paths)
# print(labels)
train_img_paths = img_paths[50:len(img_paths)]
random.seed(200)
random.shuffle(train_img_paths)
validation_img_paths = img_paths[:500]
random.seed(200)
random.shuffle(validation_img_paths)
print(train_img_paths)
Publicado cinco artículos originales · ganado elogios 0 · Vistas 10

Supongo que te gusta

Origin blog.csdn.net/liuluTL/article/details/104936989
Recomendado
Clasificación