用python处理各种文件
1.对图片的处理
(1)读取一个文件夹下的所有图片
import glob
def load_train(train_path):
images = []
files = glob.glob(path) #每个图像路径读取
for fl in files:
image = cv2.imread(fl)
images.append(image)
return images
train_path = './images_data/*.jpg'
#train_path = './images_data/*g'
(2)对图片的大小,类型进行设置
import cv2
import numpy as np
image = cv2.resize(image, (image_size_h,image_size_w),0,0, cv2.INTER_LINEAR) #图像缩放
image = image.astype(np.float32) #数据类型转换
image = np.multiply(image, 1.0 / 255.0) #归一化 np.multiply 乘法
(3)删除包含特定字符的图片或者文件
path="./images_data/"
m1 = 'change_light'
files=os.listdir(path)
for f in enumerate(files):
if f.find(m1)>=0 :
os.remove(path+f)
2.对文本文件的处理
(1)在文件中添加内容,不覆盖原来的内容
txt_path = './test.txt'
msg = '写入内容'
f = open(csv_path, 'a+')
f.write(msg)
f.close()
其中,‘a+’模式为附加模式,表示在原来的文件中新增内容,不会覆盖原文件中的内容
(2)按行读取文件内容
file_path = './test.txt'
with open(file_path, 'r') as f :
lines = f.readlines() # 读取全部内容 ,并以列表方式返回
(3) 将第一个文件中的指定内容拷贝到另一个文件中
file1_path = './file1.txt'
file2_path = './file2.txt'
content_str = ' 指定的内容或者字符串'
with open(file1_path, 'r') as f1 :
lines = f1.readlines() # 读取全部内容 ,并以列表方式返回
with open(file2_path, 'a') as f2 :
for line in lines:
if m in line:
f2.write(line)
(4) 对于一行内容按指定字符分割开,返回列表
file_path = './test.txt'
with open(file_path, 'r') as f :
lines = f.readlines() # 读取全部内容 ,并以列表方式返回
for line in lines:
line_content = line.split(',')
(5)读取一行内容中的数字
file_path = './test.txt'
all_numbers = []
with open(file_path, 'r') as f :
lines = f.readlines() # 读取全部内容 ,并以列表方式返回
for line in lines:
line = line.strip()
list_number = re.findall("\d+\.?\d*", line)
all_numbers.append(list_number)
(6)读取一行内容中特定字符串后的数字
path = './test.txt'
with open(path, 'r') as fo:
lines = f.readlines() # 读取全部内容 ,并以列表方式返回
for line in lines:
line = line.strip()
#epoch{0}, iter[352], train loss: 245.230523, valid precision: 0.358000, valid loss: 219.618176
pattern = re.compile('epoch\{([\d]+)\}, iter\[([\d]+)\], train loss: ([\d\.]+), valid precision: ([\d\.]+)')
res = pattern.findall(line)