文件操作(一) 笔记------python

一.文本文件和二进制文件

1)文本文件:存储普通的‘字符’文本,默认为unicode字符集(两个字节表示一个字符,最多表示65536个)

2)二进制文件:把数据内容用“字节”进行存储。

     *在创建时,如果我们没有增加模式“b”,则默认创建的是文本文件对象,处理基本单元是”字符“。


二.文件操作模块:

io模块-------文件流的输入和输出操作   input  output

os模块-------基本操作系统功能,包括文件操作

glob模块------查找符合特定规定的文件路径

fumatch模块--------使用模式来匹配文件路径名

fileinput模块--------处理多个输入文件

filecmp模块---------用于处理文件的比较

csv模块----------用于csv文件处理

pickle和CPickle-------用于序列化和反序列化

xml包---------用于XML数据处理

bz2,gzip,zipfile,zlib,tarfile-------用于处理压缩文件和解压缩文件(分别对于不同的算法)


三.创建文件对象 open()

1.基本语法格式:

open(文件名[,打开方式])

如果只有文件名------表示在当前目录下的文件(文件名可以录入全路径)

示例:f=open(r"d:\b.txt","a")     ==>等同于f=open("D:\a\b.txt","a")


2.判断文件名是否存在

语法:import os  #使用此操作之前必须先调用模块os

           if os.path.isfile(文件名):

                <语句>

3.文件路径

       1)相对路径:

                                   从当前文件所在的文件夹开始的路径

                                   【文件名.txt】【./文件名.txt】都是从当前文件夹寻找 【文件名.txt】

                                   【../文件名.txt】从文件夹的上一级文件夹里查找  【文件名.txt】

                                   【文件名1/文件名.txt】,在当前文件夹里查找"文件名1"这个文件夹,并在里面查找"文件名.txt".

      2)绝对路径:

                                     是指绝对位置,完整地描述了目标所在地,以及文件目录层级关系。
  

*打开文件的模式(mode):默认rt,以文本模式打开,只读

         r-----读模式

        w------写模式,如果文件不存在则创建;存在则重写新内容。

        a------追加模式,如果文件不存在则创建;如果文件存在则在文件末尾处追加内容。

        b------二进制模式(可与其他模式组合使用)

        rb------以二进制格式打卡一个文件,用于只读(wb只写,ab用于追加,)。

        t-------文本形式打卡

        +-------读、写模式(可与其他模式组合使用)

        r+-------打开一个文件用于读写,文件指针在文件开头(w+ 覆盖原文件,不存在时创建文件;a+ 文件指针放在文件结尾,不存在时,创建后用于读写;rb+文件指针在文件开头,wb+、ab+、)

        U------通用换行符支持


四.文件对象方法

       *file.close()------关闭文件

       *file.read(x)------从文件中读取x个字符,当未给定x或者给定负值时,读取剩余的所有字符,然后作为字符串返回。

       *file.readline()-----以写入模式打开,如果文件存在,则在末尾追加写入

       *file.wrinte()-----将字符串写入文件

       *file.wrintelines()-----向文件写入字符串序列seq,seq应该时一个返回字符串的可迭代对象

       *file.seek(offset,from)------在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offiset个字节。

      *file.tell()------返回当前文件的位置


五.常用编码   encoding:用指文件的编码方式

1.语法:

               file=open('文件名','w',encoding='utf8')

2.编码:

               window默认GBK,linux默认UTF-8

               ASCII------7位表示,只能表示128(2**7)个字符。

               ISO8859-1-----8为表示一个字符,能表示256个字符,兼容ASCII

               GB2312,GBK,GB18030-------兼容ISO,英文1一个字符,汉字两个字符

               Unicode--------定长编码,2个字节表示一个字符,与ISO不兼容

               UTF-8---------变长编码,1-4个字节表示一个字符,英文1个字节,汉字3个字节,兼容ISO

3.转码

在文件以二进制读取的时候,使用encode('utf8')转回汉字

*一般使用二进制读取,同样使用二进制写入,并不必使用这种方式*

'你'.encode('utf8')----->b'\xe4\xbd\xa0'    #你这个字的二进制形式

语法:file=open('sss.txt','rb')

           print(file.encode('utf8'))



六.关闭文件 close()

一般在文件进行操作之后都要关闭

语法:file.close()


七.文件写入数据 write()

1.步骤:

创建文件对象--->写入数据write()--->关闭文件对象close()

*先打开文件,再进行写入。*

*在进行写入操作时,打开文件要以 'w'等相关方式打开*

2.使用write()可以向文件写入数据。

语法:file.write('数据') #write输入的数据必须时字符串而非其他数据类型

3.写入规则:

1)如果文件不存在,先创建,如果文件存在则先清空,后写入数据。

2)*write时,只能写入字符串或二进制,列表、字典、数字都不能之间写入文件。*

3)将数据转成字符串:repr/str, 或者使用json模块

4)将数据转成二进制:使用pickle模块


八.文件读取数据(read)

1.步骤:

    同文件打开操作相同,*先打开文件,再进行读取。*

2.使用read()可以从文件中读取数据

语法1:file.read(num)#将所有数据都读取出来 ,这里的num是指读取的长度,不写时默认为-1

#从文件读取num个字符,当为给定num或给定负值的时候,读取剩余的所有字符,然后作为字符串返回。

语法2:file.readline()#只读取一行

语法3:file.readlines()#读取所有数据,保存到一个列表中,有几行保存成几个元素(在列表)

  注意:             *.在下次调用读操作时一般是从上次读取的位置继续读取

                          *.在对文件进行读操作时,要在打开文件操作上转换“r”等相关的方式。


十.文件拷贝

1.思想:

        先打开被拷贝文件--->以读'w'的方式打开新文件--->读取被拷贝文件--->将内容写入新文件--->关闭所有文件

2.文件备份

思想:先生成备份文件名----->将文件中内容拷贝到备份文件中

语法:name=file_name.rpartition('.') #会将文件以从右边数第一个点分成三个'xxx.txt'--->'xxx','.','txt'

           new_file_name=name[0]+'.bak.'+name[2]#结果为'xxx.bak.txt'

语法2:os.path.splitext(文件名)  #使用此模块之前必须先调用os模块(import os)会将文件从右数第一个点分成两段  'xxx.txt'------>'xxx','.txt'

             new_file_name=name[0]+'.bak'+name[1]#结果为'xxx.bak.txt'


十一.指针定位 tell()    seek()

1.tell()方法用来显示当前指针的位置

语法:file.tell()

2.seek(offset,whence)方法用来重新设定指针的位置。

        ·offset表示偏移量

        ·whence表示只能传入0、1、2中的一个数字。

                                        0:表示从文件头开始

                                        1:表示从当前位置开始

                                         2:表示从文件的末尾开始


十二.csv文件的读写

1.csv文件(又叫逗号分隔值或字符分隔值)

     1)概念:

                 其文件以纯文本的形式存储表格数据,单元格之间默认使用逗号分隔,每行数据之间使用换行进行分隔。

2.文件写入

     1)需要先调用csv模块

语法: import csv

    2)打开文件

语法:file=open('文件名','w',newline=' ')    #以写的方式打开,newline=' ' 是将两行数据之间得空行删除。

    3)writer方法

语法:writer=csv.writer(file)  #传入一个csv文件对象,得到一个CSVWriter对象

    4)witerow方法

语法:writer.writerow([数据列表]) #调用CSVWriter对象的writerow方法,实现一行行的写入数据。数据以列表的形式写入。

    5)writerows方法

语法:writer.writerows([数据列表],[数据列表],......)#写入几行数据用几个列表,中间以逗号间隔,列表中要元素为字符串型。


3.文件读取

*与csv文件的写操作一样,都需要调用csv模块,然后打开文件,最后关闭文件。

语法:变量名A=csv.reader(file)     #调用csv模块的reader方法,得到一个可迭代对象A,可对其进行遍历得到每行数据(*这里的变量名是指使用变量命名格则来命名,A实质上是一个可迭代对象。*)

           for row in A:

                 print(row)

十三.将数据写入内存(StringIO类,BytesIO类)

1.StringIO类

语法:form io import StringIO  #导入StringIO类

           变量A=StringIO()

           A.write(数据内容)  #将数据内容写入到内存

           print(A.getvalue())   #读取内存中写入的数据内容

           A.close()  #使用完后要记得关闭

语法2:print('数据内容',file=open('文件名','w'))

语法3:form io import StringIO  #导入StringIO类

             变量A=StringIO()

             print('数据内容',file=A)  #将数据内容写入到内存

             print(A.getvalue())   #读取内存中写入的数据内容

*写入到内存的数据内容在程序运行结束后,自动销毁*

2.BytesIO类

使用格式与StringIO一样,但BytesIO是二进制写入内存,当写入为中文是,要使用encounde('utf8'),在读取时也是二进制读取,可以使用decode('utf8')进行解码。

for io import BytesIO

b_io=BytesIO()

b_io.write('你好'.encode('utf8'))

print(b_io.getvalue().decode('utf8'))

3.两个类可以同时导入

for io import (StringIO,BytesIO)

你可能感兴趣的:(文件操作(一) 笔记------python)