Python自动化之文件管理

要对电脑中的文件和文件夹进行自动化管理,就离不开Python自带的os库,它是可以实现跨平台访问操作系统的一个模块。常见的一些操作系统相关的操作比如创建、移动、复制文件以及文件夹都可以通过该模块来完成。
需要注意的是,有的指令在Windows、Linux以及Mac中是通用的,有的则只能在Linux和Mac中使用,这个在后续讲到的时候会给大家说明。

这里将会为大家介绍一些常用的功能模块,最终会综合到一个实例中完成一个实战项目,下面就来给大家介绍os模块的功能函数:

1、os.getcwd()

该函数能够查看当前所在的路径

import os
print(os.getcwd())

大家运行上述代码就可以看到当前文件所在的一个路径,在路径输出的格式中,不同的系统有所区别,在Windows中,使用反斜杠\作为路径的分隔符来区别其层级关系,而在Linux以及Mac中则是使用斜杠/作为分隔符,Python中的反斜杠代表转义字符,所有在Python中往往使用\来作为分隔符。

2、os.path.join(psth1,path2,…)

将括号中的path1,path2…等路径进行组合,如果其中有绝对路径,那么之前的path将会被删除。
os.path.join()的功能只是起到连接文件的作用,而不能生成文件。

import os

print(os.path.join("C:\python\File1","File1.1\test.py"))
print(os.path.join("C:\python\File1",r"File1.1\test.py"))
print(os.path.join("C:\python\File1",r"/File1.1\test.py"))
3、os.listdir()

列举出目录下的所有文件以及文件夹,返回的是列表类型

import os
print(os.listdir())   #返回文件所在目录当前所有的文件和文件夹
print(os.listdir("C:\Program Files"))  #返回指定目录下的所有文件和文件夹
for i in os.listdir("C:\Program Files"):	#利用循环打印出指定文件下的所有文件及文件夹
	print(i)
4、os.scandir()

列举出目录下的所有文件以及文件夹的基本信息,该函数返回的是迭代器,其语法规则如下:
for file in os.scandir():
print(file.stat())
其返回的数据格式如下:
os.stat_result(st_mode=16895, st_ino=0, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=0, st_atime=1633851254, st_mtime=1604760333, st_ctime=1604760330)
其中:
st_size —— 文件体积大小(单位:bytes),将其除以1024就可以得到KB为单位的体积
st_ctime —— Windows下的文件创建时间
st_atime —— 文件最近访问时间
st_mtime —— 文件最近修改时间
st_birthtime —— Linux和Mac系统中的文件创建时间
由于scandir()方法所返回的时间值是Uncode格式,需要将其转换为我们常用的日期格式,在下面的实例中,为大家介绍了time模块和datetime模块下的两种时间转换的方法,大家可以根据自己的需求进行选择。

import os
import time           #引入time库进行时间转换
print(os.scandir())   #返回文件所在目录当前所有的文件和文件夹
print(os.scandir("C:\Program Files"))  #返回指定目录下的所有文件和文件夹
for file in os.scandir("C:\Program Files"):	#利用循环打印出指定文件下的所有文件及文件夹基本信息
    print("文件名:         "+file.name)
    print("文件大小:       "+str(file.stat().st_size/1024))
    print("文件创建时间:    "+time.ctime(file.stat().st_ctime))
    creat_time = datetime.datetime.fromtimestamp(file.stat().st_ctime)
    print(creat_time)
    print("文件最近访问时间:"+time.ctime(file.stat().st_atime))
    access_time = datetime.datetime.fromtimestamp(file.stat().st_atime)
    print(access_time)
    print("文件最近修改时间:"+time.ctime(file.stat().st_mtime))
    modify_time = datetime.datetime.fromtimestamp(file.stat().st_mtime)
    print(modify_time)
    print("所有信息:       "+str(file.stat()))
5、os.walk()

遍历一个目录内所有的子目录和子文件,其语法如下:
os.walk(top,topdown=Ture,οnerrοr=None,followlinks=False)
通过该函数我们可以得到一个三元的tupple(dirpath,dirnames,filenames)
第一个为其实路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。
dirpath是一个string,代表目录的路径。
dirnames是一个list,包含了dirpath下所有子目录的名字。
filenames是一个list,包含了非目录文件的名字。
这些名字不包括路径信息,如果要得到全路径,需要使用os.path.join(dirpath,name)通过for循环完成递归枚举。

for dirpath,dirnames,filenames in os.walk('./'):
    print(f'发现文件夹{dirpath}')
    print(filenames)

在这里print字符前前面加上f标识格式化字符串,加f后可以在字符串里使用大括号括起来的变量和表达式,输出大括号内变量所对应的值,如果字符串里没有表达式,那么前面加不加f输出都是一样的。

6、startswith()和endswith()

在Python中如果想要检测字符串是否以特定的子字符串开头或者结尾,常见的功能函数主要有这两个,其中startswith()方法用于检测字符串是否以指定的子字符串开头,如果是则返回Ture,否则返回False。如果其参数beg和end设置了指定值,那么就在指定的范围检查。其语法规则如下:
str.startswith(str,beg=0,end=len(string))
参数说明:
str —— 检测的字符串
str.beg —— 可选参数用于设置字符串检测的起始位置
str.end —— 可选参数用于设置字符串检测的终止位置
endswith()函数用于判断字符串是否以指定字符或子字符串结尾,其返回值为布尔类型。语法规则如下:
str.endswith(“suffix”,start,end)或者str[start,end].endswith(“suffix”)
参数说明:
suffix —— 后缀,可以是单个字符,也可以是字符串,还可以是元组,要注意的是"suffix"中的引号要省略,常用与判断文件类型。
start —— 索引字符串的起始位置
end —— 索引字符串的终止位置
str.endswith(suffix) —— start默认为0,end默认为字符串的长度len(str)

import os

print("test.py".startswith("te"))
print("test.py".startswith("1"))
print("test.py".endswith("test"))
print("test.py".endswith(".py"))
7、glob模块

glob模块是一个非常简练且实用的模块,它可以查找符合特定规则的文件路径名,只需要用到3个配置符:" “,”?","[]"。" “匹配0个或多个字符,”?“匹配单个字符,”[]"匹配指定位置范围内的字符,如:[0-9]匹配数字,其返回值是一个列表。

import glob 
#在文件夹中新建四个文件:test1.py,test2.py,test3.py,test10.txt

print(glob.glob("test*.py")) # * 表示任意多个字符
print(glob.glob("test??.py")) #检索出名称为test??.py的文件
print(glob.glob("test[0-3].py"))#检索名称为test后缀0-3的.py文件
print(glob.glob("test[1,2].py"))#检索名称为test1.py和test2.py的文件
print(glob.glob("test[!2].py"))#检索名称除了test2.py之外的test?.py的文件

print(glob.glob("**/*.py",recursive=True)) #检索当前文件夹内所有.py文件
8、读取和写入文件

在前面的章节我们已经了解过Python对于文件的操作了,在这里再简单的回顾一下:
对于读取.txt文件,我们一般用到:open(),readlines(),close()这三种方法。

file = open("file1.txt","r",encoding='utf-8')
text = file.readlines()
print(text)
file.close()

对于这种方法,每一次读取文件内容都需要打开关闭,为了避免麻烦,Python提供了with…as方法来实现文件读取之后的自动关闭。

with open("file1.txt","r",encoding='utf-8') as file:
	text = file.readlines()
	print(text) 

对于写入.txt文件来说跟上述读取逻辑是一样的:

with open("file2.txt","w",encoding='utf-8') as file: #覆盖掉原来的内容
	text = "第一行内容\n第二行内容\n"
	file.write(text)
with open("file2.txt","a",encoding='utf-8') as file: #在原来的内容后面追加
	text = "第一行内容\n第二行内容\n"
	file.write(text)

如果写入文件不存在,那么会直接新建一个文件。

9、创建临时文件储存数据

当我们在做数据分析的时候,可能会由于数据量过大导致内存不足。如果我们没有条件使用更高配置的电脑,也没有办法优化数据,那么我们可以先把计算的中间值存放在一个文本文件中。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值