python 办公⾃动化(⼊门)
python 办公⾃动化(⼊门)
持久化:内存(不能长时间保存数据)到硬盘(可以长时间保存数据)
⽂件系统:存储和管理数据的⼀种⽅式
格式化硬盘的时候就是在创建⼀个⽂件系统
open()函数
在python中使⽤操作⽂件之前,需要使⽤open()打开⽂件,其会返回⼀个⽂件对象。
下⾯时open函数的参数列表:
file:要创建或者打开的⽂件。通常为:⽂件路径/⽂件名.⽂件格式
mode:可选参数,指定⽂件的打开模式,默认为只读的⽅式打开
buffering:可选参数,⽤于设置缓冲策略。具体操作在进阶⾥⾯说
encoding:可选参数,⽤于解码或编码的编码名称⽂件
errors:可选参数,errors是⼀个可选字符串,⽤于指定如何处理编码错误。这个参数不应该在⼆进制模式下使⽤
newline:可选参数,控制通⽤换⾏符的⼯作⽅式
closefd:默认值值为True,如果closefd为False,底层⽂件描述符将保持打开状态当⽂件关闭时。当给定了⽂件名时,这就不起作⽤了并且在这种情况下必须为真
⽂件的操作模式(mode参数)有如下⼏种:
操作模式
具体含义r
读取 (默认)w
写⼊(会先截断之前的内容)x
写⼊,如果⽂件已经存在会产⽣异常a
追加,将内容写⼊到已有⽂件的末尾b
⼆进制模式t
⽂本模式(默认)+更新(既可以读⼜可以写)
这⾥我们只需要先了解file、mode、encoding这三个参数
读取⽂件内容
致橡树.txt ⽂档open (file , mode ='r', buffering =None , encoding =None , errors =None , newline =None , closefd =True )
1
'r’以只读的⽅式打开,同时选取utf-8作为⽂件的编码⽅式(我的编译器编码⽅式为utf-8,⽽致橡树.txt⽂件的编码⽅式为gbk,所以需要把⽂档的编码改为utf-8)
如何查看编译器编码:
这⾥有⼀个问题,就是如果在⽂件关闭之前,前⾯的代码出现错误,从⽽导致⽆法执⾏⽂件关闭的语
句,这样怎么办呢?
这⾥我们可以使⽤⼀个异常处理语句try-finally,⽆论try语句⾥⾯的内容是否出现异常,始终都会执⾏finally语句块⾥⾯的内容。代码如下:
以后我们都将使⽤上⾯这个格式去操作⽂件。
当⼀个⽂件很⼤时,这⾥将耗费很多时间和缓存,我们可以分批次读取
写⼊内容
如果要向⽂件中写⼊内容,我们需要将⽂件的打开模式改为a或者w
这⾥我们打开⼀个新的空⽩⽂件(⽂件不存在就在当前路径下创建⼀个新⽂档)
这⾥我们⽂件打开模型选择为w,为只读模式,我不能对其进⾏读操作。# 返回⼀个⽂件对象file = open (file ='致橡树.txt', mode ='r', encoding ='utf-8')# 读取所有内容print (file .read ()) # 切记,每次打开⽂件之后⼀定要关闭⽂件,不然⽂件会⼀直占⽤缓存file .close ()
1
2
3
4
5
6
7
8import sys print (sys .getdefaultencoding ()) # 查看⽂件编码
1
2
3# 返回⼀个⽂件对象file = open (file ='致橡树.txt', mode ='r', encoding ='utf-8')try : # 读取所有内容 print (file .read ()) finally : # 关闭⽂件 file .close () print ('关闭⽂件成功')
1
2
3
4
5
6
7
8
9
10# 返回⼀个⽂件对象file = open (file ='致橡树.txt', mode ='r', encoding ='utf-8')try : # ⼀次只读32个字节,读不到数据则返回None data = file .read (32) while data : print (data , end = '') data = file .read (32) finally : # 关闭⽂件 file .close () print ('关闭⽂件成功')
1
2
3
4
5
6
7
8
9
10
11
12
13
如果我们还⾏在⽂件后⾯继续写⼊⽂件,我们可以进⾏如下操作
读写⼆进制⽂件
先给⼤家介绍⼀个函数seek()。我们可以使⽤它移动⽂件指针到指定位置,然后进⾏读写。
seek(移动字节数,移动模式):
移动模式有三种,如下:
0:默认的模式,以⽂件开头为初始点移动移动指针;
1:以当前指针所在位置为初始点移动指针;
2:以⽂件末尾为初始位置移动指针;
强调:其中0模式可以在t或者b模式使⽤,⽽1跟2模式只能在b模式下⽤
实例:
这⾥我们⽂件的操作模式为w,所以不能使⽤seek(n,1) 、seek(n, 2) (n表⽰移动字节数)# 打开 ⼩⾬康桥的诗.txt ⽂件file = open ('⼩⾬康桥的诗.txt', mode = 'w', encoding = 'utf-8')try : # 写⼊内容 file .write ('我只想做燕⼦\n') file .write ('只需简单思想\n') file .write ('只求风中流浪\n') file .write ('我想作树\n') file .write ('不想长五脏六腑\n') file .write ('不会肝肠⼨断\n')finally : # 关闭⽂件 file .close () print ('关闭⽂件成功')1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 打开 ⼩⾬康桥的诗.txt ⽂件 将⽂件操作模式设置为a file = open ('⼩⾬康桥的诗.txt', mode = 'a', encoding = 'utf-8')try : # 写⼊内容 file .write ('我做不成燕⼦\n') file .write ('所以我飞不过感情的墙\n') file .write ('我做不成树\n') file .write ('因此也撑不破伤⼼的⽹\n')finally : # 关闭⽂件 file .close () print ('关闭⽂件成功')
1
2
3
4
5
6
7
8
9
10
11
12
13file = open ('⼩⾬康桥的诗.txt', mode = 'w', encoding = 'utf-8')try : # 打印当前⽂件指针的位置 print (file .tell ()) # 200 # 将⽂件指针移到开头 file .seek (0, 0) print (file .tell ()) # 0 # 将⽂件指针移到第⼋个字节 file .seek (8, 0) print (file .tell ()) # 8finally : file .close ()
1
random python2
3
4
5
6
7
8
9
10
11
12
13
以⼆进制形式打开⽂件,以图⽚为例,该图⽚为⼀个截图
上下⽂语法
对于open函数,我们还可以⽤with上下⽂语法,使⽤with上下⽂语法会在结束⽂件操作之后,会⾃动保存⽂件,这样我们就不需要再写finally语句在执⾏close⽅法了,让代码变得更简洁。不过并不是所有的对象都可以使⽤with上下⽂语法,必须符合上下⽂管理器协议的对象(有__enter__和__exit__魔术⽅法)才可以使⽤。
实例:
读写CSV ⽂件
CSV(Comma Separated Values)全称逗号分隔值⽂件。接下来将使⽤python对CSV⽂件进⾏操作。这⾥我们需要导⼊python中的csv模块。
csv这⾥我们主要介绍两个⽅法,
csv.writer:将数据写⼊CSV的写⼊对象
读取csv ⽂件# 导⼊模块,模块作⽤如下from io import SEEK_END , SEEK_SET # 读取⼀个图⽚,以⼆进制的模打开file = open (file = 'image.jpg', mode = 'rb')# 移动⽂件指针⾄⽂件末尾,获取⽂件长度file .seek (0, SEEK_END )# 通过tell ⽅法获取⽂件指针移动的字节数,这个字节数就是⽂件的⼤⼩print (file .tell ())# 将⽂件指针移动到最初的位置file .seek (0, SEEK_SET )try : data = file .read (512) while data : print (data , end = '') data = file .read ()finally : file .close () print ('关闭⽂件')
12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# 读⽂件with open ('⼩⾬康桥的诗.txt', 'r', encoding = 'utf-8-sig') as file : # 输出⽂件内容 print (file .read ())# 写⽂件with open ('⼩⾬康桥的诗.txt', 'a', encoding = 'utf-8-sig') as file2: # 写⼊内容 file2.write ('我做不成燕⼦\n') file2.write ('所以我飞不过感情的墙\n') file2.write ('我做不成树\n') file2.write ('因此也撑不破伤⼼的⽹\n')
1
2
3
4
5
6
7
8
9
10
11
12
还可以通过delimiter 、quotechar 参数来指定分隔符(默认是英⽂的逗号)、包围值的字符(默认是英⽂双引号)。其中,包围值的字符主要⽤于当字段中有特殊符号时,通过添加包围值的字符可以避免⼆义性。
将数据写⼊csv ⽂件中
读写Excel ⽂件
读写Excel⽂件,我们需要使⽤⼀些python的第三⽅库:
xlrd / xlwt :读取 / 写⼊,⼆者兼容低版本的Excel⽂件(后缀名为xls)xlutils:⽀持同时对Excel⽂件进⾏读操作和写⼊操作
openpyxl:获取Excel对象,兼容⾼版本的Excel⽂件(后缀名为xlsx)读取Excel ⽂件import csv with open ('2018年北京积分落户数据2.csv', encoding = 'gb18030') as file : # 每次读取⽂件的⼀⾏ content = file .readline () while content : # 对读取的数据进⾏处理,将换⾏符\n 去掉,并且⽤逗号分隔 values = content .replace ('\n', '').split (',') print (values ) # 读取下⼀⾏数据 content = file .readline ()
1
2
3
4
5
6
7
8
9
10
11with open ('2018年北京积分落户数据2.csv', encoding = 'gb18030') as file : # delimiter :设置分隔符(默认是英⽂的逗号) # quotechar :包裹字符串符号(默认是英⽂双引号) reader = csv .reader (file , delimiter = '#', quotechar = '@') for row in reader : print (row )
1
2
3
4
5
6import csv import random with open ('成绩.csv', 'w', encoding = 'utf-8-sig', newline = "") as file : writer = csv .writer (file ) # 在⽂件中写⼊内容 writer .writerow (['姓名', '语⽂成绩', '数学成绩', '英语成绩']) names = ['⼩明', '⼤⽑', '⼆⽑'] # 循环遍历,随机⽣成三⼈的各科成绩 for i in range (3): subject1 = random .randrange (50, 101) subject2 = random .randrange (60, 101) subject3 = random .randrange (40, 101) # 写⼊⽂件 writer .writerow ([names [i ], subject1, subject2, subject3])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论