文件操作(一) 笔记------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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342