news 2026/5/20 15:39:19

深度学习必备技能:够用就行的文件名与路径操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习必备技能:够用就行的文件名与路径操作

深度学习的时候难免需要处理各类文件,文件名,但是方法有很多种,按自己的习惯总结了一套。
**

1.文件路径与文件名处理

** 1.1从路径到文件名

首先你需要确定数据所在根目录

path="/home/User/Script/Model_Test/"

使用pathlib将路径字符串转换为Path对象,读取目录下所有文件,files是一个list类型,每一项是该文件的绝对路径组成的Path对象

frompathlibimportPath pathFolder=Path(path)files=list(pathFolder.glob("*.*"))print(type(files))
<class'list'>

files内容:

[PosixPath('/home/User/Script/Model_Test/2026_03_28_01.txt.tar.gz'), PosixPath('/home/User/Script/Model_Test/2026_03_28_02.txt'), PosixPath('/home/User/Script/Model_Test/2026_03_28_03.txt'), PosixPath('/home/User/Script/Model_Test/2026_03_28_04.txt'),]

遍历文件

forfileinfiles:

1.2文件名处理

文件名由文件名.后缀组成,Path对象文件名后缀处理:

#绝对路径print(type(file),file)#<class 'pathlib.PosixPath'> /home/User/Script/Model_Test/2026_03_28_01.tar.gz#含后缀文件名print(type(file.name),file.name)#<class 'str'> 2026_03_28_01.tar.gz#文件最后一个后缀".*"print(type(file.suffix),file.suffix)#<class 'str'> .gz#文件名print(type(file.stem),file.stem)#<class 'str'> 2026_03_28_01.tar#如果碰到.tar.gz文件,没有两个后缀,因为files[0].stem是<class 'str'>print(file.stem.suffix)#AttributeError: 'str' object has no attribute 'suffix'#可以通过再次转化为Path()对象即可print(type(Path(file.stem).suffix),Path(file.stem).suffix,'\n',type(Path(file.stem).stem),Path(file.stem).stem)#<class 'str'> .tar#<class 'str'> 2026_03_28_01

Path对象文件名匹配问题:
Path对象的属性Path.stem,Path.name.Path.suffix,都是字符串类型,提取.stem作为字符串处理

fileStem=Path(file.stem).stemprint(type(fileStem),fileStem)#<class 'str'> 2026_03_28_01

str.split(‘*’)法:适用比较简单的文件名类型,如2026_03_28_01

year=fileStem.split("_")[0]mouth=fileStem.split("_")[1]day=fileStem.split("_")[2]no=fileStem.split("_")[3]print(type(year),year,"\n",type(mouth),mouth,"\n",type(day),day,"\n",type(no),no)

输出:

<class'str'>2026<class'str'>03<class'str'>28<class'str'>01

从右边开始拆的str.rsplit(“*”),从左往右返回结果
**正则表达式法:**当文件名较为复杂的时候,如abc219-DEF5687_2687.txt.tar.gz,可以使用正则表达式库re
找全部符合条件的:re.findall(正则表达式,字符串),返回的是列表,列表内每项都是,
找第一个符合条件的:re.search(正则表达式,字符串),返回match对象
拆分:re.split(正则表达式,字符串),
匹配:re.match(正则表达式,字符串)返回match对象
针对match对象分组:re.search().group(),re.match().group(),返回字符串

importrefile=Path('/abc219-DEF2026_03_05_14_00.txt.tar.gz')fileStem=file.stem
模式说明
\ddigit 单个数字
\d{4}匹配连续四位数字
\d+匹配一个或多个数字
\wword 单个字母、数字、下划线
\w{4}匹配连续四位字母/数字/下划线
\w+匹配一个或多个连续的字母/数字/下划线
\.匹配 “.”(需要转义)
^字符串以xxx开头,如^abc
$字符串以xxx结尾,如abc$
.匹配任意单个字符
.*匹配任意多个字符(含0个)
()括号内的为群组(捕获组)
print('d:\n',type(re.findall(r'\d',fileName)),type(re.findall(r'\d',fileName)[0]),re.findall(r'\d',fileName),type(re.findall(r'\d',fileName)[0]),'\n',type(re.search(r'\d+',fileName)),re.search(r'\d+',fileName),'\n',type(re.search(r'\d{3}',fileName)),re.search(r'\d{3}',fileName),'\n','w:\n',type(re.findall(r'\w',fileName)),re.findall(r'\w',fileName),type(re.findall(r'\w',fileName)[0]),'\n',type(re.findall(r'\w{2}',fileName)),re.findall(r'\w{2}',fileName),'\n',type(re.findall(r'\w+',fileName)),re.findall(r'\w+',fileName),'\n','\.:\n',type(re.findall(r'\.',fileName)),re.findall(r'\.',fileName),'\n','^\w+:\n',type(re.findall(r'^\w+',fileName)),re.findall(r'^\w+',fileName),'\n','^abc.*:\n',type(re.search(r'^abc.*',fileName)),re.search(r'^abc.*',fileName),'\n','.*.tar$:\n',type(re.findall(r'.*.tar$',fileName)),re.findall(r'.*.tar$',fileName),'\n')

输出:

d:<class'list'><class'str'>['2','1','9','2','0','2','6','0','3','0','5','1','4','0','0']<class'str'><class're.Match'><re.Match object;span=(3,6),match='219'><class're.Match'><re.Match object;span=(3,6),match='219'>w:<class'list'>['a','b','c','2','1','9','D','E','F','2','0','2','6','_','0','3','_','0','5','_','1','4','_','0','0','t','x','t','t','a','r']<class'str'><class'list'>['ab','c2','19','DE','F2','02','6_','03','_0','5_','14','_0','tx','ta']<class'list'>['abc219','DEF2026_03_05_14_00','txt','tar']\.:<class'list'>['.','.']^\w+:<class'list'>['abc219']^abc.*:<class're.Match'><re.Match object;span=(0,34),match='abc219-DEF2026_03_05_14_00.txt.tar'>.*.tar$:<class'list'>['abc219-DEF2026_03_05_14_00.txt.tar']

正则表达式返回的的是一个match对象,通过group(0)输出整个match对象的字符串类型,group(n)则是patterns内第n个括号内的字符串:

patterns=r"\w+\d+-\w{3}(\d+)_(\d+)_(\d+)_(\d+)_(\d+).*"match=re.match(patterns,fileName)#一般写法,加if:ifmatch:print(f"""all_data ={match.group(0)},{type(match)},{type(match.group(0))}YY ={match.group(1)},{type(match.group(1))}MM ={match.group(2)},{type(match.group(2))}DD ={match.group(3)},{type(match.group(3))}hh ={match.group(4)},{type(match.group(4))}dd ={match.group(5)},{type(match.group(5))}""")

输出:

all_data=abc219-DEF2026_03_05_14_00.txt.tar,<class're.Match'>,<class'str'>YY=2026,<class'str'>MM=03,<class'str'>DD=05,<class'str'>hh=14,<class'str'>dd=00,<class'str'>

2.文本文件操作

open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

  • file: 文件路径(字符串或Path对象)
  • mode: 打开模式
  • encoding: 文本编码(如’utf-8’)

文本编码与文件打开模式

模式说明
'r'只读(默认),文件必须存在
'w'只写,文件存在则清空,不存在则创建
'a'追加,文件存在则追加,不存在则创建
'x'独占创建,文件已存在则报错
'b'二进制模式(如'rb''wb'
't'文本模式(默认)
'+'读写模式(如'r+''w+'

组合使用示例

  • 'rb':以二进制格式只读打开
  • 'wb':以二进制格式写入(会覆盖)
  • 'a+':以读写模式追加
  • 'r+b':以二进制格式读写打开
path="/home/User/Script/Model_Test/"pathFolder=Path(path)files=list(pathFloder.glob("*.txt"))forfileinfiles:print("file Name = ",file.name)withopen(file,"r")asf:lines=f.readlines()print("readlinesType = ",type(lines),'\n',type(lines[0]),lines[0])forlineinlines:print(len(line))cleanline=line.strip()print(len(cleanline))

with是一个上下文管理器,自动管理文件,打开后不需要手动关闭
as表示将打开的文件赋值给f
**f.readlines()**表示读取整个文件,返回的是一个列表,每一项是该行的字符串,并且,它包含档尾,换行!
**.strip()**表示移除字符串首尾的指定字符,默认为空白字符

输出:

fileName=abc-123456.txt readlinesType=<class'list'><class'str'>>ABC12345678(Defghij:klmn901 opqr:STU23456789 vwx:yza01:2345678-9012345)7473

3.CSV文件操作

安装pandas库

condainstallpandas

pd.read_csv(file_path, index_col=0, header=0) 读取CSV文件

  • file_path - 文件路径
  • index_col=0 - 将第0列(第一列)作为行索引
  • header=0 - 将第0行(第一行)作为列名
表达式说明返回类型
df.loc[primary_key, attribute]行名primary_key列名attribute定位数据由csv文件决定
df.loc[primary_key]整行DataFrame
df.loc[[primary_key1, primary_key2]]多行DataFrame
df.loc[:, attribute]整列DataFrame
df.loc[:, [attribute1, attribute2]]多列DataFrame
df.loc[primary_key, attribute]对应的值具体类型由csv文件决定
df.loc[[primary_key1, primary_key2], [attribute1, attribute2]]多个值(第一个列表是行值,第二个列表是列值)DataFrame
importpandasaspd path="/abc.csv"df=pd.read_csv(path,index_col=0,header=0)print(df.loc['a','b'])
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:03:14

老Mac升级新系统终极指南:OpenCore Legacy Patcher完整教程

老Mac升级新系统终极指南&#xff1a;OpenCore Legacy Patcher完整教程 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在为手中的老款Mac无法升级到…

作者头像 李华
网站建设 2026/4/18 8:03:15

3个实战技巧突破Sketch设计稿到HTML的智能转换瓶颈

3个实战技巧突破Sketch设计稿到HTML的智能转换瓶颈 【免费下载链接】marketch Marketch is a Sketch 3 plug-in for automatically generating html page that can measure and get CSS styles on it. 项目地址: https://gitcode.com/gh_mirrors/ma/marketch 你是否曾经…

作者头像 李华
网站建设 2026/4/18 8:03:19

3步解决Zotero文献管理效率难题:从格式混乱到规范统一的蜕变

3步解决Zotero文献管理效率难题&#xff1a;从格式混乱到规范统一的蜕变 【免费下载链接】zotero-format-metadata Linter for Zotero. A plugin for Zotero to format item metadata. Shortcut to set title rich text; set journal abbreviations, university places, and it…

作者头像 李华
网站建设 2026/5/3 2:06:31

学习C语言的第一周

大家好啊&#xff0c;我是一名C语言编程小白。 我计划每周投入14小时学习编程&#xff0c;目标是独立写出上万行代码&#xff0c; 并凭借自己的努力&#xff0c;未来能够加入米哈游。

作者头像 李华
网站建设 2026/4/18 0:19:45

OpenClaw模型热切换:gemma-3-12b-it与Qwen根据任务动态调用

OpenClaw模型热切换&#xff1a;gemma-3-12b-it与Qwen根据任务动态调用 1. 为什么需要模型热切换&#xff1f; 上周我整理本地项目文档时&#xff0c;发现一个有趣现象&#xff1a;用Qwen生成技术方案时逻辑严谨但缺乏创意&#xff0c;而用gemma-3-12b-it写代码片段很高效却容…

作者头像 李华
网站建设 2026/4/18 8:03:32

利用快马ai快速生成openclaw部署原型,十分钟搭建测试环境

利用快马AI快速生成OpenClaw部署原型&#xff0c;十分钟搭建测试环境 最近在尝试部署OpenClaw这个开源项目时&#xff0c;发现从零开始配置环境特别耗时。作为一个需要验证核心功能的开发者&#xff0c;我更希望能快速搭建起原型环境&#xff0c;而不是花大量时间处理各种依赖…

作者头像 李华