打印文件夹下的所有目录
方式一:依次遍历
代码
# 打印文件夹下的所有目录
import os
fir_dirs = os.listdir('./books')
for fir_dir in fir_dirs:
fir_path = os.path.join('./books', fir_dir)
sec_dirs = os.listdir(fir_path)
for sec_dir in sec_dirs:
sec_path = os.path.join('./books', fir_dir, sec_dir)
thr_dirs = os.listdir(sec_path)
for thr_dir in thr_dirs:
thr_path = os.path.join('./books', fir_dir, sec_dir, thr_dir)
print(thr_path)
pass
输出
方式二:glob
/*
是获取当前目录列表,也可指定检索的文件格式,如 /*.txt
代码
import glob
file_paths = glob.glob('./books/*/*/*')
print(file_paths)
输出
['./books\\food\\breakfast\\breakfast0.txt', './books\\food\\breakfast\\breakfast1.txt', './books\\food\\dinner\\dinner0.txt', './books\\food\\dinner\\dinner1.txt', './books\\food\\lunch\\lunch0.txt', './books\\food\\lunch\\lunch1.txt', './books\\IT\\AI\\AI0.txt', './books\\IT\\coder\\coder0.txt', './books\\IT\\PM\\PM0.txt']
批量重命名文件
os.listdir(path='.')
可获取当前路径的所有文件名
os.path.join(path, *paths)
拼接一个或多个路径
# 2 批量重命名文件
import os
fir_dirs = os.listdir('./books')
for fir_dir in fir_dirs:
fir_path = os.path.join('./books', fir_dir)
sec_dirs = os.listdir(fir_path)
for sec_dir in sec_dirs:
sec_path = os.path.join('./books', fir_dir, sec_dir)
thr_dirs = os.listdir(sec_path)
for i, thr_dir in enumerate(thr_dirs):
thr_path = os.path.join('./books', fir_dir, sec_dir, thr_dir)
file_new_name = os.path.join(sec_path, sec_dir) + str(i) + '.txt'
os.rename(thr_path, file_new_name)
# print(thr_dir)
pass
批量重命名文件功能运行前
批量重命名文件功能运行后
按要求把数据写入文件,输出对应文件样式
代码
# 按要求把数据写入文件
"""
1 按照以下数据写入文件
data = [
['path', 'x', 'y', 'w', 'h'],
['1.png', '100', '100', '200', '200'],
['2.png', '50', '100', '100', '100'],
['3.png', '200', '50', '150', '100'],
['4.png', '150', '100', '100', '100'],
]
2 输出对应文件样式
path x y w h
1.png 100 100 200 200
2.png 50 100 100 100
3.png 200 50 150 100
4.png 150 100 100 100
3 数据读取出来存储在data_dic中
data_dic = {
'1.png': [100, 100, 200, 200],
'2.png': [50, 100, 100, 100],
'3.png': [200, 50, 150, 100],
'4.png': [150, 100, 100, 100]
}
"""
data = [
['path', 'x', 'y', 'w', 'h'],
['1.png', '100', '100', '200', '200'],
['2.png', '50', '100', '100', '100'],
['3.png', '200', '50', '150', '100'],
['4.png', '150', '100', '100', '100'],
]
with open('./data.txt', 'w', encoding='utf-8') as file:
for infos in data:
file.write(infos[0] + '|' + infos[1] + '|' + infos[2] + '|' + infos[3] + '|' + infos[4] + '\n')
pass
with open('./data.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
# print(lines)
for line in lines:
line = line.strip().split('|')
for info in line:
print(info + '\t', end='')
pass
print()
data_dic = {}
with open('./data.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
for line in lines:
line = line.split('|')
if line[0] == 'path':
continue
key = line[0]
value = line[1:]
data_dic[key] = value
pass
print(data_dic)
运行前
运行后
原本设定是,设定了写入的文本样式,根据文本数据,输出要求的样式
改进为:写入文件样式,即为要求的样式
参考代码
优化代码参考:优化操作文件的次数和速度
代码
# 按要求把数据写入文件
"""
1 按照以下数据写入文件
data = [
['path', 'x', 'y', 'w', 'h'],
['1.png', '100', '100', '200', '200'],
['2.png', '50', '100', '100', '100'],
['3.png', '200', '50', '150', '100'],
['4.png', '150', '100', '100', '100'],
]
2 输出对应文件样式
path x y w h
1.png 100 100 200 200
2.png 50 100 100 100
3.png 200 50 150 100
4.png 150 100 100 100
3 数据读取出来存储在data_dic中
data_dic = {
'1.png': [100, 100, 200, 200],
'2.png': [50, 100, 100, 100],
'3.png': [200, 50, 150, 100],
'4.png': [150, 100, 100, 100]
}
"""
data_list = [
['path', 'x', 'y', 'w', 'h'],
['1.png', '100', '100', '200', '200'],
['2.png', '50', '100', '100', '100'],
['3.png', '200', '50', '150', '100'],
['4.png', '150', '100', '100', '100'],
]
with open('./data.txt', 'w', encoding='utf-8') as file:
for data in data_list:
data_str = '\t'.join(data)
file.write(data_str + '\n')
pass
data_dic = {}
with open('./data.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
for line in lines:
line = line.replace('\t', ' ').strip().split(' ')
if line[0] == 'path':
continue
key = line[0]
value = line[1:]
data_dic[key] = value
pass
print(data_dic)
输出
设计函数 训练集和测试集图片 存入列表
目录图
代码
# 设计函数 训练集和测试集图片 存入列表
"""
目录信息
date_set: test train
test: 0 1 2
0: cat5.png cat7.png
1: liukanshan1.jpg liukanshan3.jpg
2: liukanshan5.jpg liukanshan7.jpg
train: 0 1 2
0: cat0.png cat2.png
1: cat4.png cat6.png
2: cat1.png cat3.png
存储分析
dic = {
test: [],
train: []
}
key: test
value: [./data_set\test\0\cat5.png, ...]
"""
import os
def loadDataset():
dic = {}
fir_dirs = os.listdir('./data_set')
for fir_dir in fir_dirs:
key = fir_dir
value = []
fir_path = os.path.join('./data_set', fir_dir)
sec_dirs = os.listdir(fir_path)
for sec_dir in sec_dirs:
sec_path = os.path.join(fir_path, sec_dir)
thr_dirs = os.listdir(sec_path)
for thr_dir in thr_dirs:
thr_path = os.path.join(sec_path, thr_dir)
value.append(thr_path)
dic[key] = value
return dic
data_dic = loadDataset()
print(data_dic)
输出
{'test': ['./data_set\\test\\0\\cat5.png', './data_set\\test\\0\\cat7.png', './data_set\\test\\1\\liukanshan1.jpg', './data_set\\test\\1\\liukanshan3.jpg', './data_set\\test\\2\\liukanshan5.jpg', './data_set\\test\\2\\liukanshan7.jpg'], 'train': ['./data_set\\train\\0\\cat0.png', './data_set\\train\\0\\cat2.png', './data_set\\train\\1\\cat4.png', './data_set\\train\\1\\cat6.png', './data_set\\train\\2\\cat1.png', './data_set\\train\\2\\cat3.png']}
参考代码:设计函数 glob 版
方式一
import glob
def loadDataset():
dic = {}
test_list_paths = glob.glob('./data_set/test/*/*')
train_list_paths = glob.glob('./data_set/train/*/*')
dic['test'] = test_list_paths
dic['train'] = train_list_paths
return dic
data_dic = loadDataset()
print(data_dic)
方式二
import glob
def loadDataset():
dic = {}
data_dirs = glob.glob('./data_set/*/*/*')
for data_dir in data_dirs:
line = data_dir.split('\\')
data_type = line[1]
if data_type not in dic:
dic[data_type] = [data_dir]
else:
tmp = dic[data_type]
tmp.append(data_dir)
return dic
data_dic = loadDataset()
print(data_dic)
读取文件 train.txt 内容 使用\t分割
代码
# 读取文件 train.txt 内容 使用\t分割
"""
train_0.jpg [{"transcription": "三只松鼠", "points": [[23, 46], [181, 234], [124, 245], [46, 81]]}]
train_1.jpg [{"transcription": "蜜雪冰城", "points": [[123, 106], [281, 434], [424, 645], [147, 1081]]}]
train_2.jpg [{"transcription": "百草味", "points": [[18, 52], [136, 213], [35, 86], [445, 1325]]}]
train_3.jpg [{"transcription": "良品铺子", "points": [[1532, 1354], [239, 493], [577, 368], [1008, 499]]}]
train_4.jpg [{"transcription": "好利来", "points": [[783, 689], [1335, 468], [681, 201], [1207, 2067]]}]
"""
import json
class Food:
def __init__(self, img_name, transcription, points):
self.img_name = img_name
self.transcription = transcription
self.points = points
food_list = []
with open('./train.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
for line in lines:
data_infos = line.strip().split('\t')
img_name = data_infos[0]
# 列表嵌套 键值对数据 的字典
data_json = data_infos[1]
# json --> python object
infos = json.loads(data_json)
# 打断点查看数据信息
food_dic = infos[0]
transcription = food_dic['transcription']
points = food_dic['points']
# print(img_name, transcription, points)
food = Food(img_name, transcription, points)
food_list.append(food)
pass
for food in food_list:
print(food.img_name, food.transcription, food.points)
pass
输出
学生信息 json 版
代码
# 3 学生信息
import json
class Student:
def __init__(self, name, age, tel, score, sex):
self.name = name
self.age = age
self.tel = tel
self.score = score
self.sex = sex
pass
def getScore(self):
return f'name: {self.name} score: {self.score}'
def getStudent(self):
return f'name: {self.name} age: {self.age} tel: {self.tel} score: {self.score} sex: {self.sex}'
std_list = []
with open('./std_infos.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
for std_info in lines:
infos_json = std_info.strip()
infos = json.loads(infos_json)
name = infos['name']
age = infos['age']
tel = infos['tel']
score = infos['score']
sex = infos['sex']
# print(name, age, tel, score, sex)
std = Student(name, age, tel, score, sex)
std_list.append(std)
pass
for std in std_list:
print(std.getStudent())
pass