常用库函数_使用Python标准库函数os.listdir()时的4个注意事项

本文介绍了Python标准库os模块中的listdir()函数,详细讲解了该函数的用法,并列举了四个在使用过程中需要注意的要点,帮助开发者更好地理解和运用这个常用的库函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好消息:“Python小屋”编程比赛正式开始

推荐图书:

《Python程序设计(第3版)》,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,8月第4次印刷

49b1aa4463b0165a6115ea8a6f441bb9.png

京东购买链接:https://item.jd.com/12668739.html

87d825492150b6a5d86a0a7b2f5411e9.png

天猫、当当均已上架,可以选择自己常用平台搜索“董付国 第3版”找到本书。配套资源:教学大纲、电子教案、微课视频、PPT课件、例题源码、习题答案、考试系统。《Python程序设计(第3版)》配套教学大纲《Python程序设计(第3版)》课后习题答案

=======================

标准库函数os.listdir()是在文件操作和文件遍历时常用的函数之一,用来获取指定文件夹中的所有文件和子文件夹名称组成的列表,完整语法为:listdir(path=None)os.listdir()函数在使用时应注意以下几个问题:1)函数参数path的值可以是字符串或字节串,如果使用字符串指定文件夹则返回的列表中都是字符串形式的文件和子文件夹名字,如果使用字节串指定文件夹则返回的列表中都是字节串形式(UTF-8编码)的文件和子文件夹名字,如果不指定参数则默认返回当前文件夹中的文件和子文件夹名字。a7f3f48ed520a60eaea0754b6ac67d64.png2)如果指定的文件夹中包含子文件夹,listdir()函数返回的列表中不包含子文件夹中的内容。如果需要遍历子文件夹中的内容,可以使用深度优先或广度优先遍历目录树的方法,详见:Python使用广度优先和深度优先两种方法遍历目录树3)listdir(path)函数返回的列表中的路径都是相对于参数path的相对路径,如果参数path不是当前文件夹,那么listdir(path)返回的列表中的路径都无法直接访问。b917f0f4ea6052bfe3b1bcec20c026f5.png4)listdir()函数返回的列表中的字符串是“乱序”的,大致来说,是按字符串转换为大写或小写之后的Unicode编码升序排序的,与我们习惯的按数字、拼音或字母顺序不一样。如果需要的话(例如按文件名编号升序排序后导入其他文件或系统),可以对列表中的字符串进行排序之后再使用。假设Python安装目录中有test子文件夹,内容如下(随机生成文件名):da51a78b3daff2b72f10398eea4cf3a8.png使用listdir()函数获取其中文件名以及不同排序规则显示效果演示如下:8d892ee1c8f9a3d9f129422bc5f1f5aa.png温馨提示:关注微信公众号“Python小屋”,在公众号后台发送消息“大事记”可以查看董付国老师与Python有关的重要事件;发送消息“教材”可以查看董付国老师出版的Python系列教材(已累计印刷超过100次)的适用专业详情;发送消息“历史文章”可以查看董付国老师推送的超过1000篇原创技术文章;发送消息“会议”或“培训”可以查看近期董付国老师的培训安排;发送消息“微课”可以查看董付国老师免费分享的超过500节Python微课视频;发送消息“课件”可以查看董付国老师免费分享的Python教学资源;发送消息“小屋刷题”可以下载“Python小屋刷题神器”,免费练习1187道客观题和118道编程题,题库持续更新;发送消息“编程比赛”了解Python小屋编程大赛详情。
import os import shutil import random # random.seed(0) #随机种子,可自选开启 def split_data(file_path, label_path, new_file_path, train_rate, val_rate, test_rate): images = os.listdir(file_path) labels = os.listdir(label_path) images_no_ext = {os.path.splitext(image)[0]: image for image in images} labels_no_ext = {os.path.splitext(label)[0]: label for label in labels} matched_data = [(img, images_no_ext[img], labels_no_ext[img]) for img in images_no_ext if img in labels_no_ext] unmatched_images = [img for img in images_no_ext if img not in labels_no_ext] unmatched_labels = [label for label in labels_no_ext if label not in images_no_ext] if unmatched_images: print("未匹配的图片文件:") for img in unmatched_images: print(images_no_ext[img]) if unmatched_labels: print("未匹配的标签文件:") for label in unmatched_labels: print(labels_no_ext[label]) random.shuffle(matched_data) total = len(matched_data) train_data = matched_data[:int(train_rate * total)] val_data = matched_data[int(train_rate * total):int((train_rate + val_rate) * total)] test_data = matched_data[int((train_rate + val_rate) * total):] # 处理训练集 for img_name, img_file, label_file in train_data: old_img_path = os.path.join(file_path, img_file) old_label_path = os.path.join(label_path, label_file) new_img_dir = os.path.join(new_file_path, 'train', 'images') new_label_dir = os.path.join(new_file_path, 'train', 'labels') os.makedirs(new_img_dir, exist_ok=True) os.makedirs(new_label_dir, exist_ok=True) shutil.copy(old_img_path, os.path.join(new_img_dir, img_file)) shutil.copy(old_label_path, os.path.join(new_label_dir, label_file)) # 处理验证集 for img_name, img_file, label_file in val_data: old_img_path = os.path.join(file_path, img_file) old_label_path = os.path.join(label_path, label_file) new_img_dir = os.path.join(new_file_path, 'val', 'images') new_label_dir = os.path.join(new_file_path, 'val', 'labels') os.makedirs(new_img_dir, exist_ok=True) os.makedirs(new_label_dir,
03-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值