一、地址
相对地址:返回上一级是 ./ 上上级是../
写路径时,因为\是转义字符,需要用\\ 或 /
import cv2
path = "img/klee.png"
image = cv2.imread(path)
print(image.shape)
二、文件名存储TXT
将img文件夹下所有文件名存储到img_list.txt下
import os
target_file_path = "img"
txt_path="img_list.txt"
list_name = os.listdir(target_file_path) #listdir读取文件名
with open(txt_path,'w',encoding="utf-8") as f:
for name in list_name:
# splitext将路径名分为根[0]和扩展名[-1]
# name = os.path.splitext(name)[0] #只取文件名
f.write(name+'\n')
os.listdir() 返回文件(夹)名列表,是用来读取文件名的(包括后缀)。
os.path.split(path) 将path分割成目录和文件名二元组返回:
eg: os.path.split('c:\\img\\klee.png') 变成 ('c:\\img', 'klee.png')
os.path.splitext(path) 将path分割成文件名与扩展名二元组返回,可做分片操作:
eg: os.path.splitext('c:\\img\\klee.png') 变成 ('c:\\img\\klee', '.png')
三、对文件名TXT的修改
1、删除特定后缀
对上文的txt文件进行修改,删除txt存储的png后缀:
with open(txt_path, 'r') as f, open('Test_.txt', 'w') as f1:
txt_list=f.readlines() #readlines读取txt内容
for line in txt_list:
new_line=line.split('.png')[0]
f1.write(new_line+'\n')
f.readlines() 将整个txt文本全部读出并输出为一个列表,每行的字做为一个字符串。for遍历时每次为一行。
f.readline() 只读取第一行,并作为一个字符串输出。for遍历时为单字。
f.read() 把所有的字一次性读出并作为一个大的字符串。for遍历时为单字。
split() 函数:(于上面的os.path.split有区别)
string.split(str="", num=string.count(str) )[n]
str - - 分隔符,默认为所有的空字符,包括空格、换行(\n)等。
num - - 从前向后的分割次数。
[n] - - 选取的第n+1个分片.
补充:split() 函数还能用于去掉换行、制表符等 \n \t
c = '''hello
world'''
print(c)
print(c.split('\n')) #去掉\n
print(c.split('\t')) #去掉\t
#输出为:
#hello
# world
#['hello', ' world']
#['hello\n world']
2、批量修改
批量修改文件夹中的文件,将img文件夹下所有png图片转换为jpg后缀文件并且存储在新的文件夹img_jpg下:
def PngToJpg(file_path,new_file_path):
if not os.path.exists(new_file_path):
os.makedirs(new_file_path)
for fileName in os.listdir(file_path):
# 创建文件后缀名为.jpg
newFileName = fileName[0:fileName.find(".")]+".jpg"
print(newFileName)
# 文件修改并保存
im = Image.open(file_path+"\\"+fileName) #找到这个图片
rgb_im = im.convert('RGB') #先转换成rgb
rgb_im.save(new_file_path+"\\"+newFileName) #保存
str[ ]操作注意:左闭右开
png图片有alpha通道(red,green,blue,alpha),不能直接转换到jpg格式(没有第四通道),需要先丢弃掉alpha通道转换成rgb,然后再直接保存为jpg格式。