百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python办公自动化——文件处理(python 处理文件内容)

off999 2024-10-08 06:14 42 浏览 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个步骤:

  1. 调用 open() 函数,返回一个File对象。
  2. 调用File对象的 read() 或 write() 方法。
  3. 调用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'}]
  1. 如果已有的文件以写模式打开,会发生什么?如果是“写模式”则覆写原有的文件,重新写入;如果是“添加模式”,则在已有文件的末尾添加文本。
  2. 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可以是:

  1. 一个文件的名称,则将source文件复制为新名称的destination
  2. 一个文件夹,则将source文件复制到destination中
  3. 若这个文件夹不存在,则将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,并返回新位置的绝对路径的字符串。

  1. 如果source和destination是文件夹,且destination已存在,则会将source文件夹下所有内容复制到destination文件夹中。移动。
  2. 如果source是文件夹,destination不存在,则会将source文件夹下所有内容复制到destination文件夹中,source原文件夹名称将被替换为destination文件夹名。 移动+重命名
  3. 如果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() 在循环的每次迭代中,返回三个值:

  1. 当前文件夹称的字符串。
  2. 当前文件夹中子文件夹的字符串的列表。
  3. 当前文件夹中文件的字符串的列表。

注:当前文件夹,是指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()的返回值是被压缩后文件的绝对路径。

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: