课程介绍
Hi,我是你的课程老师,很高兴在这里结识你!我们这次的课程是Python自动化办公课程。
这套课程适合准备就业的大学生、互联网从业者、行政和财务等职场人士。提升个人能力,掌握高效办公技能,解决日常办公需求。
涵盖日常办公的多个场景,确保你在实际的工作中现学现用,真正解放双手,高效办公!
如果您没有接触过Python相关知识,可以先学习我们的Python基础课程。
您可以登录1024fun乐学编程主页学习Python基础课程,还可以学习完整的自动化办公课程。
http://www.eluzhu.com:1818/
文本读取
好,我们正式开始这次的课程。
如果现在分配给你一个任务,把几个文档的内容合并到一起,你会怎么做呢?
通过复制粘贴,把几个文档的内容粘贴到一个文档中不就得了。
嗯哼,如果是10个文本文件还可以接受,那100个呢?难道要复制粘贴100次吗?采用复制粘贴的方法,可能需要花费10分钟来完成, 但是假如利用Python的话, 只需要10秒。所以说, Python在职场中也起到很重要的作用。
对于上面的任务,我相信在学完本章课程,您就可以独立完成啦。
那么现在从最简单的文件读取开始, 认识Python的内置函数open。open的用法很简单, 直接通过代码来给大家说明。首先我在E盘的1024IDE文件夹下创建了内容为Hello World的txt文件,文件名称为hello。
#open("文件路径","操作模式") file = open(r"E:\1024IDE\hello.txt","r") data = file.read() print(data)
输出结果:
Hello World
上面的代码是open函数的最简单用法, 读取一个文本里面的内容, 首先在第2行代码中, 我们通过open函数并且往里面传参数, 第一个参数就是文件路径, 第二个参数就是操作模式, 使用 r 进行读取, 这时候就会得到一个对象 file, 第3行代码中, 文件对象使用 read 的方法, 意思就是读取文本里面的内容, 这时把获取到的文本里面的内容赋值给data, 最终输出打印 data, 就是文本文件的内容
文本写入
有速取文件数据自然有写入文件数据,操作方法也与读取差不多,比如现在想往路径位于E盘的1024IDE文件夹下,名为hello的文件中写入一段文字:“我正在使用1024学习Python”, 只需使用对象file的方法write就可以了。
#open("文件路径","操作模式") file = open(r"E:\1024IDE\hello.txt","w") file.write("我正在使用1024学习Python") file.close()
上面第3行代码使用了file对象write的方法, 方法write传的参数就是想写入的数据, 写入完数据记得关闭释放资源, 也就是使用对象file的close方法。还有之前读取数据也要养成使用方法close的习惯, 因为每次利用Python打开文件读取数据或者写入数据, 都会占用一定的计算机资源, 所以使用每次都要记得close释放资源, 还有需要注意的地方是第2行代码, 操作模式由r改为w,也就是对文件进行写入数据。
啊咧,是不是写错了,路径前面是不是应该写 w ?
哈哈,并没有写错,你难道忘了基础课程的知识点了么。Python 使用反斜杠(\)转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个 r,表示原始字符串。在写文件路径的时候,记得取消转义,也就是在文件路径前面加上字母r,然而操作模式r和w分别是读取和写入文本数据的意思, 两者是有很大区别的, 如open(r"文件路径","操作模式") ,
备忘录
我们看看今天学习的知识有什么实际用途,我们做一个备忘录。
任务需求:将数据存储为本地文本,并且在程序下次打开的时候,仍然有之前输入的数据。
方法提示:使用文件写入与读取,在程序每次运行前进行数据读取。
代码实现:
#存储号码 def write_info(name,tep) : with open(r"E:\1024IDE\memo.txt", "a") as file: file.write("{} , {} \n".format(name,tep)) #读取号码 def read_info(): with open(r"E:\1024IDE\memo.txt", "r") as file: data=file.read() print(data) def main (): print("1-存储号码 2-查询号码") while 1: command=eval(input("请输入您要进行的操作:")) if command == 1: name=input("请输入朋友名字:") tep=input("请输入朋友电话:") write_info(name, tep) print("电话号码存储成功\n") elif command == 2: print("\n查询成功") read_info() else: print("请输入正确操作") if __name__ == '__main__': main()
运行结果为:
通过以上代码可知,文本文件充当该脚本的一个小型数据库,永久存储在计算机的存储器中当需要获取数据的时候,再从本地文件中读取即可,并且可以实现对文本文件数据的增加、删除、改写的操作,这是该程序的基本思路。
这里有一个新的知识点——eval() 函数, 该函数用来执行一个字符串表达式, 并返回表达式的值。关于该函数相关的知识点非常多,这里只需知道它可以用来执行一个字符串表达式即可。
批量修改文件名
如果现在老板让我们把100个文件按序号1~100命名,不会Python的同学可能会一个一个手动修改,这样很耗费时间,但如果会Python的同学,那么它只需3秒就可以修改完100个文件名。
import os import time #获取所有文件名 file_name = [] for root,dirs,files in os.walk(r"E:\1024IDE\file"): for i in files: file_name.append(i) #修改所有文件名 count = 0 for i in file_name: count += 1 #文件原名 old_path = r"E:\1024IDE\file\\" + i #文件新名 new_path = r"E:\1024IDE\file\\" + str(count) + ".txt" os.rename(old_path,new_path) print("修改成功")
程序运行后的结果
注意一点,您在练习的时候,找一个空文件夹测试,最好不要影响到自己电脑里的其他文件。
os模块walk
os模块的walk方法是一个文件、目录遍历器,它可以处理目录下的子文件和子目录,返回一个三元组(root,dirs,files)假如现在要实现一个模拟计算机文件搜索的功能,如果使用之前所学listdir方法,只能对当前目录起作用,这时就要用到walk方法。
import os import time #获取当前工作目录 print("获取当前工作目录为:" + os.getcwd()) #获取 walk 方法返回的数据 print(os.walk(".\\")) #获取文件信息 def get_file(): for root,dirs,files in os.walk(".\\"): print(root) print("-------") print(dirs) print("*******") print(files) get_file()
运行结果
唉唉,代码中的 root 是什么意思呢?
root 可以理解为当前目录的状态,你看,第一次获取到的是 “.\” ,意思是当前目录,获取当前目录的文件和文件夹。其他的具体如下。
名称 | 作用 |
---|---|
roots | 代表需要遍历的根文件夹 |
root | 表示正在遍历的文件夹的名字(根/子) |
dirs | 记录正在遍历的文件夹下的子文件夹集合 |
files | 记录正在遍历的文件夹中的文件集合 |
简易文件管家
上节介绍了批量修改文件名,本节来完善代码,实现一个文件管家。它可以修改任何工作目录下的文件名,同时还可以删除任何目录下的文件。
下面例子中,实现一个文件管家,它可以对任何目录下的文件进行操作。
#简易文件处理管家 import os #选择工作目录 def choice_path(): path = input("请选择您要进入的工作目录:") os.chdir(path) case_path = os.getcwd() print("已进入工作目录:" + case_path) #获取文件或者文件夹名 def execute(): global save_file print("\n 获取成功 ===") #存储信息 save_file = [] #获取所有的文件名 for root,dirs,files in os.walk(".\\"): for i in files: print(i) save_file.append(i) break return save_file #展示文件信息 def showinfo(): print("\n") for i in execute(): print(i) #修改文件 def modify_info(): print(""" ========您要进行的操作======== 1-序号修改文件名 2-删除文件 """) command2 = input("请输入您的文件操作:") #序号方式命名文件 if command2 == "1": count = 0 for i in save_file: count += 1 path = ".\\" old = path + i types = i.split(".") new = path + str(count) + "." + types[1] os.rename(old,new) print("文件名修改成功") #删除文件 elif command2 == "2": for i in save_file: path = ".\\" old = path + i os.remove(old) print("文件删除成功") #主程序入口 if __name__ == "__main__": choice_path() showinfo() modify_info()
程序运行结果
上面的代码中第21行break关键字需要详细解释一下,表示的意思是终止它所在的上一层循环,因为我们只修改当前的文件夹目录。如果不使用break关键字,程序就不会终止它的上层循环会继续执行修改子文件夹目录下的文件名,同时删除功能用到了os模块的remove方法,只需传入交件的路径参数就可以了.如果不用break的话可能会把子目录下的文件名也修改了,同时删除成功能用到了os模块的remove方法,只需传入文件的路径就可以了,整体代码并没有太大难度。
哇,好神奇,我也能使用程序操作文件啦。但是有点慌张,一下子就把文件删除了,幸好都不是什么重要的文件。
在测试程序的时候一定要新建一个文件夹,并且确保输入的路径无误后,再继续执行下面的操作。在删除文件时一定要多加小心。
walk方法是处理简易的文件、目录的遍历器,在使用Python与文件和文件夹进行操作的时候会经常用到。同时学会批量修改文件 名可以节省很多时间,因为如果手动一个一个修改会耗费大量时间,这并不是我们希望的,所以学 好Python也是很重要的。
您可以登录1024fun乐学编程主页学习Python基础课程,还可以学习完整的自动化办公课程。
http://www.eluzhu.com:1818/