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小时内删除。