Python办公自动化——文件处理(python 处理文件内容)
off999 2024-10-08 06:14 28 浏览 0 评论
Python办公自动化——文件处理
文件自动化处理
文件处理
文件与文件路径
用 os.path.join() 函数来创建文件名称字符串,其主要功能是用于拼接文件路径,形成符合规范的文件名。
import os
os.path.join('测试','算例','不是真的路径')输出: ‘测试\算例\不是真的路径’
当前工作目录
每个运行在计算机上的程序,都有一个“当前工作目录”。
利用 os.getcwd() 函数,可以取得当前工作路径的字符串。
利用 os.chdir() 可以改变当前工作路径。
import os
os.getcwd()输出: ‘C:\Users\srm\Desktop\暂时备份区’
os.chdir('C:\\Users\\srm\\Desktop')
os.getcwd()输出: ‘C:\Users\srm\Desktop’
路径操作
绝对路径和相对路径
“绝对路径”,总是从根文件夹开始。
“相对路径”,相对于程序的当前工作目录。
相对路径中,单个句点“.”表示当前目录的缩写,两个句点“…”表示父文件夹。
os.path.abspath(path) :将相对路径转换为绝对路径,将返回参数的绝对路径的字符串。
os.path.isabs(path) :判断是否是绝对路径,是返回True,不是则返回False。
os.path.abspath('.') # 当前路径转化为绝对路径输出: ‘C:\Users\srm\Desktop’
os.path.isabs('.')输出: False
os.path.isabs(os.path.abspath('.'))输出: True
路径操作
os.path.relpath(path,start) :返回从start路径到path的相对路径的字符串。如果没提供start,就使用当前工作目录作为开始路径。
os.path.dirname(path) : 返回当前路径的目录名称。
os.path.basename(path) :返回当前路径的文件名称。
os.path.relpath('A:\\测试算例\\不是真的路径','A:\\')输出: ‘测试算例\不是真的路径’
mypath = 'C:\\Users\\srm\\Desktop\\暂时备份区\\main.cpp'
os.path.dirname(mypath)输出: ‘C:\Users\srm\Desktop\暂时备份区’
os.path.basename(mypath)输出:‘main.cpp’
可以用 split() 字符串方法,并根据 os.path.sep 中的字符串进行分割,得到每个文件夹的字符串的列表
mypath.split(os.path.sep)输出: [‘C:’, ‘Users’, ‘srm’, ‘Desktop’, ‘暂时备份区’, ‘main.cpp’]
路径有效性检查
os.path.exists(path) :如果path参数所指的 文件或文件夹 存在,则返回True,否则返回False。
os.path.isfile(path) :如果path参数存在,并且是一个 文件 ,则返回True,否则返回False。
os.path.isdir(path) :如果path参数存在,并且是一个 文件夹 ,则返回True,否则返回False。
os.path.exists('C:\\Windows')输出: True
os.path.exists('C:\\else')输出: False
os.path.isfile('C:\\Users\\srm\\Desktop\\暂时备份区\\main.cpp')输出: True
os.path.isfile('C:\\Users\\srm\\Desktop\\暂时备份区')输出:False
os.path.isdir('C:\\Users\\srm\\Desktop\\暂时备份区\\main.cpp')输出: False
os.path.isdir('C:\\Users\\srm\\Desktop\\暂时备份区')输出: True
文件及文件夹操作
用os.makedirs()创建新文件夹
os.makedirs() 可以创建所有必要的中间文件夹。
os.makedirs('C:\\Users\\srm\\Desktop\\暂时备份区\\practice') # 创建文件夹,若文件夹已存在,不会覆盖,会报错查看文件大小和文件夹内容
os.path.getsize(path) :返回path参数中文件的字节数。
os.listdir(path) :返回文件名字符串的列表,包含path参数中的每个文件。
os.path.getsize('C:\\Users\\srm\\Desktop\\暂时备份区\\main.cpp')输出: 5240
os.listdir('C:\\Users\\srm\\Desktop\\暂时备份区')同时使用 os.path.getsize() 和 os.listdir() 可以得到目录下所有文件的总字节数
totalSize = 0
for filename in os.listdir('C:\\Users\\srm\\Desktop\\暂时备份区'):
totalSize = totalSize + os.path.getsize(os.path.join('C:\\Users\\srm\\Desktop\\暂时备份区',filename))
print(totalSize)输出: 503884
文件读写过程
读写文件3个步骤:
- 调用 open() 函数,返回一个File对象。
- 调用File对象的 read() 或 write() 方法。
- 调用File对象的 close() 方法,关闭该文件。
用open()函数打开文件
helloFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt')
print(helloFile) # open() 函数返回一个File对象<_io.TextIOWrapper name='C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt' mode='r' encoding='cp936'>读取文件内容
read() :读取文件内容。
readlines() :按行读取文件中的内容,取得一个字符串列表,列表中每个字符串是文本中的一行且以\n结束。
helloContent = helloFile.read()
helloContent输出: ‘hello world\n\n111\n222’
sonnetFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt')
sonnetFile.readlines()输出: [‘hello world\n’, ‘\n’, ‘111\n’, ‘222’]
写入文件
“写模式”:‘w’,将覆写原有的文件,从头开始。
“添加模式”:‘a’,将在已有文件的末尾添加文本。
wFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt','w')
wFile.write('Hello world!\n')
wFile.close() # 关闭后才能完成写入,从txt文件中看到写入的内容wFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt','a')
wFile.write('111\n 222\n 333') # write() 方法不会像print()函数那样,在字符串的末尾自动添加换行字符,必须自己添加该字符
wFile.close()wFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt')
content = wFile.read()
wFile.close()
print(content)Hello world!
111
222
333保存变量
- shelve模块shelve 模块,可以将Python中的变量保存到二进制的 shelf 文件中。这样,程序就可以从硬盘中恢复变量的数据。
import shelve
shelfFile = shelve.open('C:\\Users\\srm\\Desktop\\暂时备份区\\mydata')
cats = ['Zonphie','Pooka','Simon']
shelfFile['cats'] = cats
shelfFile.close()当前工作目录下有3个新文件:mydata.bak、mydata.dat和mydata.dir。重新打开这些文件,取出数据。
注意: shelf 值不必用读模式或写模式打开,因为打开后,既能读又能写。
shelfFile = shelve.open('C:\\Users\\srm\\Desktop\\暂时备份区\\mydata')
type(shelfFile)输出: shelve.DbfilenameShelf
shelfFile['cats']输出: [‘Zonphie’, ‘Pooka’, ‘Simon’]
与字典类似, shelf 只有 keys() 和 values() 方法,返回shelf中键和值的类似列表的值。但是这些方法返回类似列表的值,却不是真正的列表,所以应该将它们传递给 list() 函数,取得列表的形式。
shelfFile = shelve.open('mydata')
list(shelfFile.keys())输出: [‘cats’]
shelfFile.values()输出: ValuesView(<shelve.DbfilenameShelf object at 0x00000285F3AD4F10>)
list(shelfFile.values())输出: [[‘Zonphie’, ‘Pooka’, ‘Simon’]]
shelfFile.close()- pprint.pformat() 函数pprint.pformat() 函数返回要打印的内容的文本字符串,这个字符串既易于阅读,也是语法上正确的Python代码。假如,有一个字典,保存在一个变量中,希望保存这个变量和它的内容,以便将来使用。pprint.pformat() 函数将提供一个字符串,我们可以将它 写入.py文件 。这个文件可以成为我们自己的模块,如果需要使用存储其中的变量,就可以导入它。
import pprint
cats = [{
'name':'Zophie','desc':'chubby'},{
'name':'Pooka','desc':'fluffy'}]
pprint.pformat(cats)"[{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]"fileObj = open('C:\\Users\\srm\\Desktop\\暂时备份区\\myCats.py','w')
fileObj.write('cats = '+pprint.pformat(cats)+'\n')
fileObj.close()myCats.py 是一个可以导入的模块。
import myCats
myCats.cats[{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]- 如果已有的文件以写模式打开,会发生什么?如果是“写模式”则覆写原有的文件,重新写入;如果是“添加模式”,则在已有文件的末尾添加文本。
- read() 和 readlines() 方法之间的区别是什么?read()直接读取文件内容,readlines()按行读取文件中的内容,取得一个字符串列表,列表中每个字符串是文本中的一行且以\n结束,两者之间可以通过下面的代码转换
helloFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt')
s = helloFile.read()
s'Hello world!\n111\n 222\n 333'helloFile = open('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt')
helloFile.readlines()['Hello world!\n', '111\n', ' 222\n', ' 333']l = s.split('\n')
for i in range(len(l)-1):
l[i] = l[i] + '\n'l['Hello world!\n', '111\n', ' 222\n', ' 333']综合练习:生成随机的测验试卷文件
假如你是一位地理老师,班上有 35 名学生,你希望进行美国各州首府的一个小测验。不妙的是,班里有几个坏蛋,你无法确信学生不会作弊。你希望随机调整问题的次序,这样每份试卷都是独一无二的,这让任何人都不能从其他人那里抄袭答案。当然,手工完成这件事又费时又无聊。好在,你懂一些 Python。
下面是程序所做的事:
- 创建 35 份不同的测验试卷。
- 为每份试卷创建 50 个多重选择题,次序随机。
- 为每个问题提供一个正确答案和 3 个随机的错误答案,次序随机。
- 将测验试卷写到 35 个文本文件中。
- 将答案写到 35 个文本文件中。
这意味着代码需要做下面的事:
- 将州和它们的首府保存在一个字典中。
- 针对测验文本文件和答案文本文件,调用 open()、 write()和 close()。
- 利用 random.shuffle()随机调整问题和多重选项的次序。
# 读取数据
import pandas as pd
import random
df = pd.read_csv('C:\\Users\\srm\\Desktop\\暂时备份区\\state.csv',header=None)
df.head()0 | 1 | |
0 | Alabama | AL |
1 | Alaska | AK |
2 | Arizona | AZ |
3 | Arkansas | AR |
4 | California | CA |
# 转换成字典
dic = dict(zip(df[0].tolist(),df[1].tolist()))# 生成试卷
que = df[0].tolist()
for i in range(3):
random.shuffle(que)
for item in que:
# 写入问题
s = 'sj'+str(i)+'.txt'
path = os.path.join('C:\\Users\\srm\\Desktop\\暂时备份区\\',s)
wFile = open(path,'a')
wFile.write('question:')
wFile.write(item)
wFile.write('\n')
# 写入选项
ans = df[1].tolist()
rans = dic[item]
tep = [rans]
ans.remove(rans)
random.shuffle(ans)
tep.extend(ans[0:2])
random.shuffle(tep)
wFile.write(tep[0]+' '+tep[1]+' '+tep[2]+'\n')
wFile.close()
# 写入答案
s = 'da'+str(i)+'.txt'
path = os.path.join('C:\\Users\\srm\\Desktop\\暂时备份区\\',s)
wFile = open(path,'a')
wFile.write(rans)
wFile.write('\n')
wFile.close()组织文件
shutil模块
shutil(或称为shell工具)模块中包含一些函数,可以在Python程序中复制、移动、改名和删除文件。
复制文件和文件夹
shutil.copy(source, destination) :将路径source处的文件复制到路径 destination处的文件夹(source 和 destination 都是字符串),并返回新复制文件绝对路径字符串。
其中destination可以是:
- 一个文件的名称,则将source文件复制为新名称的destination
- 一个文件夹,则将source文件复制到destination中
- 若这个文件夹不存在,则将source目标文件内的内容复制到destination中,若destination文件夹不存在,则自动生成该文件。(慎用,因为会将source文件复制为一个没有扩展名的名字为destination的文件,这往往不是我们希望的)
import shutil
shutil.copy('C:\\Users\\srm\\Desktop\\暂时备份区\\hello.txt','C:\\Users\\srm\\Desktop\\一些中间数据文件')'C:\\Users\\srm\\Desktop\\一些中间数据文件\\hello.txt'文件和文件夹的移动与改名
shutil.move(source, destination) :将路径 source 处的文件/文件夹移动到路径destination,并返回新位置的绝对路径的字符串。
- 如果source和destination是文件夹,且destination已存在,则会将source文件夹下所有内容复制到destination文件夹中。移动。
- 如果source是文件夹,destination不存在,则会将source文件夹下所有内容复制到destination文件夹中,source原文件夹名称将被替换为destination文件夹名。 移动+重命名
- 如果source和destination是文件,source处的文件将被移动到destination处的位置,并以destination处的文件名进行命名,移动+重命名。注意:如果destination中有原来已经存在同名文件,移动后,会被覆写,所以应当特别注意。
永久删除文件和文件夹
os.unlink(path) : 删除path处的文件。
os.rmdir(path) : 删除path处的文件夹。该文件夹必须为空,其中没有任何文件和文件夹。
shutil.rmtree(path) :删除 path 处的文件夹,它包含的所有文件和文件夹都会被删除。
注意:使用时,需要非常小心,避免删错文件,一般在第一次运行时,注释掉这些程序,并加上print() 函数来帮助查看是否是想要删除的文件。
用send2trash模块安全地删除
shutil.rmtree(path) 会不可恢复的删除文件和文件夹,用起来会有危险。因此使用第三方的 send2trash 模块,可以将文件或文件夹发送到计算机的垃圾箱或回收站,而不是永久删除。因程序缺陷而用send2trash 删除的某些你不想删除的东西,稍后可以从垃圾箱恢复。
注意:使用时,需要非常小心,避免删错文件,一般在第一次运行时,注释掉这些程序,并加上 print() 函数来帮助查看是否是想要删除的文件。
遍历目录树
os.walk(path) :传入一个文件夹的路径,在for循环语句中使用 os.walk() 函数,遍历目录树,和 range()函数遍历一个范围的数字类似。不同的是, os.walk() 在循环的每次迭代中,返回三个值:
- 当前文件夹称的字符串。
- 当前文件夹中子文件夹的字符串的列表。
- 当前文件夹中文件的字符串的列表。
注:当前文件夹,是指for循环当前迭代的文件夹。程序的当前工作目录,不会因为 os.walk() 而改变。
用zipfile模块压缩文件
为方便传输,常常将文件打包成.zip格式文件。利用zipfile模块中的函数,Python程序可以创建和打开(或解压)zip文件。
创建和添加到zip文件
zipfile.ZipFile(‘filename.zip’, ‘w’) :以写模式创建一个压缩文件ZipFile 对象的 write(‘filename’,‘compress_type=zipfile.ZIP_DEFLATED’) 方法:
如果向 write() 方法中传入一个路径,Python 就会压缩该路径所指的文件, 将它加到 ZIP 文件中。
如果向 write() 方法中传入一个字符串,代表要添加的文件名。第二个参数是“压缩类型”参数,告诉计算机用怎样的算法来压缩文件。可以总是将这个值设置为 zipfile.ZIP_DEFLATED (这指定了 deflate 压缩算法,它对各种类型的数据都很有效)。
注意:写模式会擦除zip文件中所有原有的内容。如果只希望将文件添加到原有的zip文件中,就要向zipfile.ZipFile() 传入’a’作为第二个参数,以添加模式打开 ZIP 文件。
读取zip文件
调用 zipfile.ZipFile(filename) 函数创建一个 ZipFile 对象(注意大写字母Z和F),filename是要读取zip文件的文件名。
ZipFile 对象中的两个常用方法:
namelis() 方法,返回zip文件中包含的所有文件和文件夹的字符串列表。
getinfo() 方法,返回一个关于特定文件的 ZipInfo 对象。
ZipInfo 对象的两个属性: file_size 和 compress_size ,分别表示原来文件大小和压缩后文件大小
从zip文件中解压缩
ZipFile 对象的 extractall() 方法:从zip文件中解压缩所有文件和文件夹,放到当前工作目录中。也可以向 extractall() 传递的一个文件夹名称,它将文件解压缩到那个文件夹, 而不是当前工作目录。如果传递的文件夹名称不存在,就会被创建。
ZipFile 对象的 extract() 方法:从zip文件中解压单个文件。也可以向 extract()传递第二个参数, 将文件解压缩到指定的文件夹, 而不是当前工作目录。如果第二个参数指定的文件夹不存在, Python 就会创建它。extract()的返回值是被压缩后文件的绝对路径。
相关推荐
- 万能显卡驱动离线版pc(万能显卡驱动离线版)
-
万用驱动是综合各电脑硬件的性能而制做的软件,对于大多数的电脑硬件驱动都好用,但对于少数品牌电脑驱动要求严格的,就不灵了。有的硬件用万能驱动后,使用效果不佳,就是因为没有完全驱动好。所以,知名品牌电脑硬...
- 笔记本windows8系统下载(笔记本电脑系统win8)
-
在电脑上面就可以下载,打开浏览器搜索windous8系统会出现一些下拉选择,选择第一条或者选择有官网字样的,就直接有下载按钮,然后点击下载就可以了win8可以支持现在可以见到的所有Photosho...
- win 11(win 11 25h2)
-
Windows11是由微软公司(Microsoft)开发的操作系统,应用于计算机和平板电脑等设备。于2021年6月24日发布,2021年10月5日发行。Windows11提供了许多创新...
- 手机视频恢复软件免费版下载
-
手机视频删了怎么恢复 一、安卓手机视频恢复 1.打开电脑,移动鼠标,进入互盾安卓恢复大师官网,下载并安装该软件。手机连接至电脑。手机视频删了怎么恢复 2.打开运行互盾安卓恢复大师,在软件界面看到...
- diy电脑装机教程(diy电脑组装步骤)
-
1,看价格。根据自己的预算价格,选择适合该价格的电脑。注意不要以过高的价格买到配置过低的电脑;2,看性能。根据自己需要的电脑性能,以合理的价格购买。注意不要以过高的价格买到配置过低的电脑。电脑的配置如...
- u盘莫名其妙要格式化(u盘总是要格式化什么意思)
-
如果您在使用U盘时突然收到提示需要格式化的消息,这可能是由于以下原因之一引起的:U盘感染病毒:U盘中可能存在恶意病毒,这些病毒可能会导致U盘无法正常使用。当您尝试打开U盘时,系统会提示您进行格式化操作...
- win7家庭版原版(win7家庭版价格)
-
你的win7旗舰版应该是个盗版软件,在你使用的过程中你可能触碰到了后台升级,升级完以后就变成了家庭版了,在你不知不觉中被改变的,厄这个软件属于盗版的,厄升级完以后没什么大区别,这个旗舰版家庭版在家里面...
- win10自动更新失败怎么办(win10自动升级失败)
-
安装更新失败有许多原因。WindowsUpdate需要能够扫描您的计算机以了解需要哪些更新,并能够下载和安装这些更新。如果某个阶段遇到问题,则可能阻止某个更新安装到计算机中。有关错误或失败的详细信...
- 截图的几种方法(截图的几种方法有哪些)
-
第一种截图方式:按printScreen键。按一下键盘上的printScreen键以后,整个屏幕会被截取下来,截图会默认保存在剪贴板中。第二种截图方式:使用微信截图。进入聊天界面,我们会发...
- 电脑装了两个系统怎么切换(电脑安装2个系统怎么更换启动)
-
1.点击运行打开电脑点击左下角的开始菜单栏选项,右击鼠标在序列栏中选择运行打开。2.输入msconfig接着在运行的输入框中输入msconfig点击确定即可打开系统配置。3.点击引导打开系统配置的页面...
- linux系统哪个版本好用(最好linux系统版本)
-
个人比较推荐Debian这个发行版本。DebianGNU/Linux于1993年首次公布,至今已经有近30年历史了。当然其他版本比如openSUSE,Slackware,ArchLinux,Ubu...
- win10激活在哪里查看(win10激活时间在哪里看)
-
在Windows10中,您可以通过以下方法查看激活状态:方法1:使用“设置”应用1.点击屏幕左下角的“开始”按钮,然后点击“设置”(齿轮图标)。2.在设置窗口中,点击“系统”图标。3.在“系统...
- 官方win10dll文件修复工具(官方win7dll文件修复工具)
-
当电脑丢失dll文件时,可以采用以下几种方法进行一键修复:从回收站还原:如果是不小心误删了一些计算机文件,导致电脑出现异常的情况时,首先就可以去回收站找回dll文件,如果文件还在,就可以通过还原操作来...
- qq所有历史旧版本大全(qq历史版本一览表)
-
有2种方法。一种是:你是QQ会员。你可以把旧版打开,聊天记录上传。然后打开新的QQ,下载。第2种是:你在硬盘上装了QQ软件,然后你就点卸载(uninst),把原来的卸了。然后按原位置覆盖,装上06版。...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
