python自动化办公(一)
创始人
2024-06-02 07:24:19
0

本文代码参考其他教程书籍实现。

文章目录

  • 文件读写
    • open函数
    • 读取文本文件
    • 写入文本文件
  • 文件和目录操作
    • 使用os库
    • 使用shutil库

文件读写

open函数

open函数有8个参数,常用前4个,除了file参数外,其他参数都有默认
值。file指定了要打开的文件名称,应包含文件路径,不写路径则表示
文件和当前py脚本在同一个文件夹。buffering用于指定打开文件所用的
缓冲方式,默认值-1表示使用系统默认的缓冲机制。文件读写要与硬盘
交互,设置缓冲区的目的是减少CPU操作磁盘的次数,延长硬盘使用寿
命。encoding用于指定文件的编码方式,如GBK、UTF-8等,默认采用
UTF-8,有时候打开一个文件全是乱码,这是因为编码参数和创建文件
时采用的编码方式不一样。

mode指定了文件的打开模式。打开文件的基本模式包括r、w、a,对应
读、写、追加写入。附加模式包括b、t、+,表示二进制模式、文本模
式、读写模式,附加模式需要和基本模式组合才能使用,如 “rb”表示以
二进制只读模式打开文件,“rb+”表示以二进制读写模式打开文件。

要注意的是,凡是带w的模式,操作时都要非常谨慎,它首先会清空原
文件,但不会有提示。凡是带r的文件必须先存在,否则会因找不到文
件而报错。

新建文本文件python_zen.txt,将python之禅文本(import this 返回的文本)复制粘贴。保存为UTF-8无BOM编码格式
在这里插入图片描述
常见的对象方法及其作用说明

方法作用
read将文件读入字符串中,也可以读取指定字节
readline读入文件的一行到字符串中
readlines将整个文件按行读入列表中
write向文件中写入字符串
writelines向文件中写入一个行数据列表
close关闭文件
flush把缓冲区的内容写入硬盘
tell返回文件操作标记的当前位置,以文件的开头为原点
next返回下一行,并将文件操作标记位移到下一行
seek移动文件指针到指定位置
truncate截断文件

读取文本文件

# 使用open函数打开文件
f=open('./python_zen.txt',mode='r',encoding='utf-8')
type(f)#查看类型
_io.TextIOWrapper
# 使用read方法将文件读入字符串中
texts=f.read()
print(texts)#输出文件全部内容

在这里插入图片描述

f.seek(0)#移动文件指针到文件开始处
0
# 使用readline方法读入文件的一行到字符串
texts=f.readline()
print(texts)

在这里插入图片描述

# 继续使用readline方法读取
texts=f.readline()
print(texts)#第二行该行为空行

在这里插入图片描述

# 继续使用readline方法读取
texts=f.readline()
print(texts)#第三行

在这里插入图片描述

# readline方法每次只读取一行,它常常与for循环配合使用
f.seek(0)
for line in f:print(line,end='')

在这里插入图片描述

# readlines方法读取效果
f.seek(0)
texts=f.readlines()
print(texts)

在这里插入图片描述
readlines的效果是一次性读取整个文件,并自动将文件内容按行分解成列表。
读取完毕后要用close方法关闭文件。

f.close()

在进行Python文件的读取或者写入的时候,都需要调取close方法来关闭文件,
前者是避免占用内存,后者是保证将内容顺利写入目标文件中。
有些时候我们会忘记调用close方法,或者运行中途代码出错,导致未运行close方法。
为了避免这种情况,可以使用try…finally…结构。

try:f=open(r'./python_zen.txt','r')...
finally:f.close()

这种结构简单地说:无论异常是否发生,在程序结束前,finally中的语句都会被执行。

# 此外,可以用上下文管理器with语句,确保不管使用过
# 程中是否发生异常都会执行必要的“清理”操作,以释放资源。
with open(r'./python_zen.txt','r') as f:texts=r.read()...

统计单词出现的频率

from collections import Counter
lists=[]
punctuation=',。!?、()【】<>《》=:+-*—“”...\n'#跳过其他字符
with open('./python_zen.txt',mode='r',encoding='utf-8') as f:for line in f:for word in line.split(' '):#如果统计字母则去掉[.split(' ')]即可if word not in punctuation:lists.append(word)
counter=Counter(lists)
print(counter)

在这里插入图片描述

写入文本文件

# 写入一个文本文件
f=open(r'./python_zen_write.txt',mode='w',encoding='utf-8')
#首尾文本紧跟引号可以防止输入多余的空行
f.write(
'''The Zen of Python, by meBeautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.'''
)
f.close()

在这里插入图片描述

# 有时,我们需要逐步写入内容,每次只写一句话,
# 这时不能用w模式,w会覆盖之前的文本内容,而应该使用追加模式a
f=open(r'./python_zen_write.txt',mode='a',encoding='utf-8')
f.write('这是python之禅的内容')
#我们尝试不运行f.close()会发生什么

打开python_zen_write.txt文件查看,想要追加写入的内容并没有写入。
在这里插入图片描述
当写文件时,操作系统往往不会立刻把数据写入硬盘,而是先放入内存中缓存起来,然后再陆续写入。只有调用close方法时,操作系统才保证
把没有写入的数据全部写入硬盘。忘记调用close方法的后果是,虽然建立了文件,但是数据并没有写入文件。

# 可以使用flush方法,强制将缓存的数据写入文件
f.flush()

可以看到追加内容已经写入
在这里插入图片描述
但是似乎不是换行后追加写入,加个\n换行就行。

# 要在文件开始位置插入一句话
# file.seek(off, whence)
# whence(0代表文件开始位置,1代表当前位置,2代表文件末尾)偏移off字节
#文章开头介绍过,r+,读写模式,忘了的回到文章开头看
with open('./python_zen_write.txt',mode='r+',encoding='utf-8') as f:content=f.read()f.seek(0,0)f.write('开始位置:python之禅\n'+content)

在这里插入图片描述
试试末尾追加写入

with open('./python_zen_write.txt',mode='r+',encoding='utf-8') as f:f.seek(0,2)f.write('\n末尾位置:结束语')

在这里插入图片描述

文件和目录操作

使用os库

import os

常用的操作函数

函数说明
getcwd获取当前工作目录,即当前python脚本所在的目录路径
listdir列出指定目录下的所有文件和子目录,包括隐藏文件
mkdir创建目录
unlink删除文件
remove删除文件
rmdir删除空目录
removedirs若目录为空,则删除,并递归到上一级目录,若上一级目录为空,也删除
rename重命名文件
stat获取一个文件的属性及状态信息

os.path可以调用ntpath.py模块

os.path

在这里插入图片描述
常用的操作函数

函数说明
abspath返回规范化的绝对路径
basename返回最后的文件名部分
dirname返回目录部分
split将文件名分割成目录和文件名
splitext分离扩展名
join将多个路径组合起来,以字符串中含有/的第一个路径开始拼接
getctime返回文件或目录的创建(复制到某个目录)的时间
getatime访问时间,读一次文件的内容,这个时间就会更新
getmtime修改时间,修改一次文件的内容,这个时间就会更新
getsize获取文件大小
isabs如果path是绝对路径,返回True
exists如果path存在,则返回True;如果path不存在,则返回False
isdir如果path是一个存在的目录,则返回True,否则返回False
isfile如果path是一个存在的文件,则返回True,否则返回False
os.getcwd()#当前工作目录

在这里插入图片描述

# 修改工作目录
os.chdir('D:\\Anaconda3\\AnacondaProjects')
print(os.getcwd())
os.chdir('D:\\Anaconda3\\AnacondaProjects\\python自动化办公')
print(os.getcwd())

在这里插入图片描述

os.listdir()#获取当前工作目录的全部文件和子目录

在这里插入图片描述

# 遍历文件目录
# os.listdir()方法不能获取子目录里面的文件,
# 要进一步获取则需要用到os.walk方法。
path=r'D:\Anaconda3\AnacondaProjects\python自动化办公'
for foldName,subfolders,filenames in os.walk(path):for filename in filenames:print(foldName,filename)#foldName文件目录,filename文件名

在这里插入图片描述

# 拆分绝对路径文件名
path=r'D:\Anaconda3\AnacondaProjects\python自动化办公\python_zen.txt'
print(os.path.split(path))
print(os.path.dirname(path))
print(os.path.basename(path))
print(os.path.splitext(path))

在这里插入图片描述

#组合文件名
print(os.path.join(os.getcwd(),os.path.basename(path)))

在这里插入图片描述

# 获取文件属性
path=r'D:\Anaconda3\AnacondaProjects\python自动化办公\python_zen.txt'
print(os.path.getctime(path))#创建时间
print(os.path.getmtime(path))#修改时间
print(os.path.getatime(path))#访问时间

在这里插入图片描述
上述格式的时间表示从1970年1月1日到现在已经经过多少秒,要把它转换成可以理解的时间要使用time模块。

import time
print(time.ctime(os.path.getctime(path)))#创建时间
print(time.ctime(os.path.getmtime(path)))#修改时间
print(time.ctime(os.path.getatime(path)))#访问时间

在这里插入图片描述
这里的创建时间,并不是指这个文件内容的原创时间,如果文件从别处复制过来,那就是复制的时间。

print(os.path.getsize(path))#查看文件大小

在这里插入图片描述

# stat方法获取文件的属性及状态信息
print(os.stat(path))

在这里插入图片描述

# 输出文件大于0且后缀为.txt的文件名
for file in os.listdir():path=os.path.abspath(file)filesize=os.path.getsize(path)if filesize>0 and os.path.splitext(path)[-1]=='.txt':print(os.path.basename(path))

在这里插入图片描述
同理,也可以删除符合某些条件的文件os.remove(file)

# 新建一个文本文件
with open('new.txt','w',encoding='utf-8') as f:f.write('一个新的txt文件')
for foldName,subfolders,filenames in os.walk(os.getcwd()):print('foldName:',foldName,'\n','subfolders:',subfolders,'\n','filenames:',filenames)

在这里插入图片描述

# 将当前目录及子目录所有new.txt文件改名为new2023.txt
for foldName,subfolders,filenames in os.walk(os.getcwd()):for filename in filenames:#不加这个筛选条件,则是更改所有文件文件名。也可加其他筛选条件if filename=='new.txt':abspath=os.path.join(foldName,filename)extension=os.path.splitext(abspath)[1]new_name=filename.replace(extension,'2023'+extension)os.rename(abspath,os.path.join(foldName,new_name))

使用shutil库

下篇文章python自动化办公(二)再继续写吧。

相关内容

热门资讯

你的晚安是我的早安是什么歌曲 你的晚安是我的早安是什么歌曲苏天伦《你的早安是我的晚安》“你的晚安是我的早安”是单小源的歌曲《东京遇...
积极进取的小故事 积极进取的小故事现代的普通人,不要名人的。不能与别人重复,尽快回答   啄木鸟的故事       啄...
熊出没之探险日记3什么时候播出... 熊出没之探险日记3什么时候播出?熊出没之探险日记3,春节前播放。熊出没只是探险日记三2020年5月4...
谁知道所有有关“七”的歌?拜托... 谁知道所有有关“七”的歌?拜托了各位 谢谢就是歌曲名里有“七”这个字的!谢谢七月七迅谈日晴 看我七十...
求一本小说 女主穿越了三次 每... 求一本小说 女主穿越了三次 每次都在福临身边 后来怀孕了孩子被打掉了那个 女主叫什么雯?那个女主就是...
如果记忆不说话,流年也会开出花... 如果记忆不说话,流年也会开出花的基本信息书 名:《如果记忆不弯饥好说话,流年也会开出花》埋铅 作 者...
你好,旧时光漫画版在哪里可以看... 你好,旧时光漫画版在哪里可以看?暂时在绘心上连载
一首英文歌,男的组合唱的,MV... 一首英文歌,男的组合唱的,MV是一个婚礼的过程。求歌名。是不是darin的can'tstoplove...
为什么很多人喜欢用胶片相机? 为什么很多人喜欢用胶片相机?有一种情怀叫做“怀旧“吧,现在数码相机越来越普遍了,已经到了”全民摄影“...
女主先爱上男主,男主却不喜欢女... 女主先爱上男主,男主却不喜欢女主或者是另有所爱,最后女主男主还是在一起的穿越小说。有木有再生缘:我的...
爱情失恋伤感句子 爱情失恋伤感句子越是美好的从前,越幸福的曾经,现在只能带来锥心的疼痛,痛到撕心裂肺,肝肠寸断,终于痛...
24岁穿这个会不会显老 24岁穿这个会不会显老有点显老,这个颜色款式,颜色有点暗,没有活力,属于那种气质佳,长得高雅的女人,...
哈尔的移动城堡英语版 哈尔的移动城堡英语版可以发给我吗度盘~请查收~
秦时明月之万里长城什么时候播 秦时明月之万里长城什么时候播据说是今年暑假开播别急,官网什么的信他你就输了,12年之前底应该会出,杭...
孩子会得抽动症吗? 孩子会得抽动症吗?我天生的气性比较大,有时跟别人斗嘴时候就会手脚哆嗦,麻木,我问一下这是不是抽动症就...
亨德尔一生为音乐献出了怎样的贡... 亨德尔一生为音乐献出了怎样的贡献?亨德尔一生写了歌剧41部,清唱剧21部,以及大量的管乐器与弦乐器的...
礼仪起源和发展的经典故事? 礼仪起源和发展的经典故事?一、礼仪的起源;1、天神生礼仪;2、礼为天地人的统一体;3、礼产生于人的自...
描写桂林山水的句子有哪些? 描写桂林山水的句子有哪些?天下风光数桂林有杨万里的“梅花五岭八桂林,青罗带绕碧玉簪”;有邹应龙的“无...
避免与强敌正面对决的成语 避免与强敌正面对决的成语避免与强敌正面对决的成语避实就虚 【近义】避重就轻、避难就易、声东击西【反义...
多愁善感类的成语 多愁善感类的成语心细如发【解释】:极言小心谨慎,考虑周密。亦作“心细于发”。【出自】:吴梅《题天香石...