Python进阶笔记(2):自动化处理文件(上)

简介: Python进阶笔记(2):自动化处理文件

一. os模块和os.path模块


1.1 os模块介绍


OS:Operating System 操作系统


  • 1、os模块是python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。


  • 2、os模块与os.path模块用于对目录或文件进行操作


例:打开记事本


执行代码就自动打开


# 打开记事本
import os
os.system('notepad.exe')



和Win+R再输入notepad再回车,结果一样


例:打开计算器


# 打开计算器
import os
os.system('calc.exe')



例:启动QQ


# 直接调用可执行文件
# 启动QQ
import os
os.startfile('D:\\Program Files\\Tencent\\QQ\\Bin\\qq.exe')



1.2 os模块操作目录相关函数


函数名 使用方法
getcwd() 返回当前工作目录
listdir(path) 返回指定路径下的文件和目录信息
mkdir(path[,mode]) 创建单层目录,如该目录已存在抛出异常
makedirs(path) 递归创建多层目录,如该目录已存在抛出异常,注意:'E:\a\b’和’E:\a\c’并不会冲突
rmdir(path) 删除单层目录,如该目录非空则抛出异常
removedirs(path1/path2…) 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
chdir(path) 将path设置为当前工作目录
remove(path) 删除文件
rename(old, new) 将文件old重命名为new
system(command) 运行系统的shell命令
walk(top) 遍历top路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])
以下是支持路径操作中常用到的一些定义,支持所有平台
os.curdir 指代当前目录(‘.’)
os.pardir 指代上一级目录(‘…’)
os.sep 输出操作系统特定的路径分隔符(Win下为’\‘,Linux下为’/')
os.linesep 当前平台使用的行终止符(Win下为’\r\n’,Linux下为’\n’
os.name 指代当前使用的操作系统(包括:‘posix’, ‘nt’, ‘mac’, ‘os2’, ‘ce’, ‘java’)


os.getcwd():获取当前工作目录


import os
print(os.getcwd())


C:\Users\zdb\PycharmProjects\untitled


os.chdir() :设置设置当前工作目录


os.listdir(): 列举指定目录中的文件名


(’.‘表示当前目录,’…'表示上一级目录)


import os
print(os.getcwd())    #获取当前工作目录
os.chdir('E:\\')      #改变工作目录
print(os.getcwd())
print(os.listdir('E:\\'))   #把目录中的所有文件列举出来


C:\Users\zdb\PycharmProjects\untitled
E:\
['$RECYCLE.BIN', 'abc.txt', 'BaiduNetdiskDownload', 'DTLFolder', 'QLDownload', 'qqpcmgr_docpro', 'qycache', 'shuzizhong', 'System Volume Information', 'text.txt', 'WanyxGames', 'work', 'Youku Files', '江西理工大学-Ver6.0.0(20170419)Windows(通用版).exe']


mkdir(path) :创建单层目录,如该目录已存在抛出异常


os.mkdir('E:\\A')           #E潘中创建文件夹A
os.mkdir('E:\\A\\B')        #A里面建立B



makedirs(path):创建多级目录


### makedirs(path)
创建多级目录



remove(path) :删除文件


os.remove('E:\\A\\B\\text.txt')   #删除text.txt


rmdir(path):删除单层目录,如该目录非空则抛出异常


os.rmdir('E:\\A\\B')          #删除B


rmmovedirs(path):删除多级目录


import os
os.removedirs('A/B/C')


os.curdir 指代当前目录(’.’)


import os
print(os.curdir)               #显示当前目录
print(os.listdir(os.curdir))   #显示上一级目录


.
['.idea', 'A_1.txt', 'A_2.txt', 'A_3.txt', 'B_1.txt', 'B_2.txt', 'B_3.txt', 'temp.py', 'venv']


1.3 os.path模块操作目录相关函数


函数名 使用方法
abspath(path) 用于获取文件或目录的绝对路径
exists(path) 判断指定路径(目录或文件)是否存在,存在返回True
join(path, name) 将目录与目录或者文件名拼接起来
splitext(path) 分离文件名与扩展名,返回(f_name, f_extension)元组
basename(path) 从一个目录中提取文件名
dirname(path) 从一个路径中提取文件路径,不包括文件名
isdir(path) 同于判断是否为路径
split(path) 分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在
getsize(file) 返回指定文件的尺寸,单位是字节
getatime(file) 返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
getctime(file) 返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
getmtime(file) 返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)

以下为函数返回 True 或 False
isabs(path) 判断指定路径是否为绝对路径
isfile(path) 判断指定路径是否存在且是一个文件
islink(path) 判断指定路径是否存在且是一个符号链接
ismount(path) 判断指定路径是否存在且是一个挂载点
samefile(path1, paht2) 判断path1和path2两个路径是否指向同一个文件


os.path.relpath(patj, start):返回从start到path的相对路径的字符串


os.path.abspath():返回文件的绝对路径


import os.path
print(os.path.abspath('temp.py'))


C:\Users\zdb\PycharmProjects\untitled\temp.py


os.path.exists(path):判断文件是否存在


# 判断文件是否存在,存在为True
import os.path
print(os.path.exists('temp.py'), os.path.exists('111.py'))


True False


os.path.join() :合成路径


import os.path
print(os.path.join('E:\\Python', 'temp.py'))


E:\Python\temp.py


例2


import os
print(os.path.join('A','B','C'))                  #合成工作路径名
print(os.path.join('C:','A','B','C'))
print(os.path.join('C:\\','A','B','C'))


A\B\C
C:A\B\C
C:\A\B\C


basename(path) :去掉目录路径,单独返回文件名


import os
print(os.path.basename('E:\\A\\B\\C\\abc.avi'))   #只显示文件名


abc.avi


dirname(path) :去掉文件名,单独返回目录路径


import os
print(os.path.dirname('E:\\A\\B\\C\\abc.avi'))    #只显示工作路径


E:\A\B\C


os.path.split(path) :分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在


import os
print(os.path.split('E\\A\\abc.avi'))   #分割文件名与路径
print(os.path.split('E\\A\\B'))         #将最后一个目录作为文件名分割下来


('E\\A', 'abc.avi')
('E\\A', 'B')


splitext(path) :分离文件名与扩展名,返回(f_name, f_extension)元组


import os
print(os.path.splitext('E\\A\\abc.avi'))   #分离文件名与文件后缀


('E\\A\\abc', '.avi')


ismount(path)
:判断指定路径是否存在且是一个挂载点


import os
print(os.path.ismount('E:\\'))
print(os.path.ismount('E:\\A'))


True
False


课堂案例


例:获取当前目录里的所有.py文件


import os
path = os.getcwd()        # 获取当前工作目录
lst = os.listdir(path)    # 列举当前目录的所有文件,放在列表中
for filename in lst:      # 遍历列表中的所有文件
    if filename.endswith('.py'):  # 如果是.py文件
        print(filename)      # 就输出


alien_invasion.py
all_events.py
ball.py
car.py
electric_car.py
game_functions.py
glass.py
main.py
name_function.py
pizza.py
settings.py
survey.py
temp.py


1.4 os.path.getatime() 、os.path.getctime()、os.path.getmtime()


os.path.getatime(file) :访问时间


  • 返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)


oa.path.getctime(file):创建时间


  • 返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)


oa.path.getmtime(file) :修改时间


  • 返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)


import os
print(os.path.getatime('E:\\abc.txt'))   #返回访问时间
print(os.path.getctime('E:\\abc.txt'))   #返回创建时间
print(os.path.getmtime('E:\\abc.txt'))   #返回修改时间


1591704113.4222739
1591704113.4222739
1591704113.4222739


用time模块的gmtime()或localtime()函数换算


import time
import os
print(time.gmtime(os.path.getatime('E:\\abc.txt')))
print(time.localtime(os.path.getmtime('E:\\abc.txt')))


time.struct_time(tm_year=2020, tm_mon=6, tm_mday=9, tm_hour=12, tm_min=19, tm_sec=41, tm_wday=1, tm_yday=161, tm_isdst=0)
time.struct_time(tm_year=2020, tm_mon=6, tm_mday=9, tm_hour=20, tm_min=19, tm_sec=41, tm_wday=1, tm_yday=161, tm_isdst=0)


二. 文件读写


2.1 文件读操作


读取文本时,python将其中的所有文本都解读为字符串


语法规则:file = open(filename [,mode,encoding])


  • file:被创建的文件对象


  • open:创建文件对象的函数


  • filename:要创建或打开的文件名称


  • mode:打开默认为只读


  • encoding:默认文本文件中字符的编写格式为gbk


例:读取磁盘文件的内容


file = open('a.txt', 'r')  # 只读形式打开a.txt
print(file.readlines())    # 逐行读取,返回列表,每行为以列表元素
file.close()               # 打开之后都要关闭


['中国\n', '美丽']



方法二,效果一样,且不需close


with open('a.txt', 'r') as file:  # 默认为只读,'r'其实可以省略
  print(file.readlines())


2.2 文件写操作


例:新文件中写入一行


filename = "abc.txt"
with open(filename, 'w') as file_object:
    file_object.write("zdb\n")


例:追加到旧文件中写入


filename = "abc.txt"
with open(filename, 'a') as file_object:
    file_object.write("zzz\n")    #在上面原有文件里追加一行数据


2.3 常用的文件打开模式


按文件中数据的组织形式,文件分为以下两大类


  • 文本文件:存储的是普通“字符文本”,默认为unicode字符集,可以使用记本事程序打开


  • 二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须使用专用的软件打开,举例:mp3音频文件,jpg图片,doc文档等


打开模式 执行操作
‘r’ 只读方式打开文件(默认)
‘w’ 写入的方式打开文件,会覆盖已存在的文件
‘x’ 如果文件已经存在,使用此模式打开将引发异常
‘a’ 以写入模式打开,如果文件存在,则在末尾追加写入
‘b’ 以二进制模式打开文件,不能单独使用,需要与其它模式一起使用,如rb,wb
‘t’ 以文本模式打开(默认)
‘+’ 读写模式打开,不能单独使用,需要与其它模式一起使用,如a+
‘U’ 通用换行符支持


‘w’


1、open以写入的方式打开一个不存在的文件,便能创建一个新文件


file = open('b.txt', 'w')
file.write('helloworld')
file.close()



2、再次以写入的形式写进创建好的文件,便覆盖文件的内容


file = open('b.txt', 'w')
file.write('python')
file.close()



例2:


这里有两种打开文件的方法,同时两种写入文件的方法


# 一,使用print方式进行输出()
fp = open('text.txt', 'w')
print('奋斗成就更好的你', file=fp)   # 这里也可以f.write()
fp.close()
"""第二种方式,使用文件读写操作"""
with open('text1.txt', 'w') as file:
    file.write('奋斗成就更好的你')


‘a’


把上述代码的’w’改成’a’,再运行一次,便在原来的基础上追加,所以结果显示两个python


file = open('b.txt', 'a')
file.write('python')
file.close()



但如果原来没有这个文件,便创建,如以下代码在不存在的c文件中写入


file = open('c.txt', 'a')
file.write('python')
file.close()



‘b’


这里进行图片的赋值,原图片为win.png,复制后命名为copy.png


# 进行图片的复制
src_file = open('win.png', 'rb')  # 原文件,二进制读
target_file = open('copy.png', 'wb')  # 目标文件,二进制写
target_file.write(src_file.read())  # 原文件读出,写入目标文件
target_file.close()   # 关闭两个文件
src_file.close()


结果如下:


相关文章
|
3天前
|
Python
【Python进阶(五)】——模块搜索及工作目录
【Python进阶(五)】——模块搜索及工作目录
|
1天前
|
存储 人工智能 测试技术
python自动化测试实战 —— CSDN的Web页面自动化测试
python自动化测试实战 —— CSDN的Web页面自动化测试
8 0
|
1天前
|
Web App开发 设计模式 测试技术
python自动化测试实战 —— 自动化测试框架的实例
python自动化测试实战 —— 自动化测试框架的实例
4 0
|
1天前
|
监控 数据可视化 IDE
python自动化测试实战 —— 单元测试框架
python自动化测试实战 —— 单元测试框架
8 2
|
1天前
|
Web App开发 JavaScript 测试技术
python自动化测试实战 —— WebDriver API的使用
python自动化测试实战 —— WebDriver API的使用
6 1
|
1天前
|
Web App开发 测试技术 Python
【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver
【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver
6 0
|
1天前
|
测试技术 BI Python
【如何学习Python自动化测试】—— HTMLTestRunner 生成测试报告
【如何学习Python自动化测试】—— HTMLTestRunner 生成测试报告
6 0
|
1天前
|
Java 测试技术 数据库连接
【如何学习Python自动化测试】—— Python 的 unittest 框架
【如何学习Python自动化测试】—— Python 的 unittest 框架
4 0
|
1天前
|
存储 网络协议 测试技术
【如何学习Python自动化测试】—— Cookie 处理
【如何学习Python自动化测试】—— Cookie 处理
7 1
|
1天前
|
Web App开发 JavaScript 测试技术
【如何学习Python自动化测试】—— 警告框处理
【如何学习Python自动化测试】—— 警告框处理
6 0