九、python-字符编码和文件

一、python文件指定编码方式(读取文件内容的编码方式)

如果想以某种格式保存数据,在文件的第一行添加:# coding:gbk        (编码类型有多种)

python3默认是utf-8编码;python2默认是ASCII编码方式

python2默认不是Unicode,如果想存为unicode,可以直接在变量前加一个u,比如:a = u'人',否则就以默认的或文件头指定的存储。

pythoncharm终端默认的编码格式为utf-8.

编码:.encode('编码格式')

解码:.decode('目标解码格式')

二、文件

 1、打开文件open(),默认是rt模式

控制文件读写操作的模式:

        r:只读模式               

        w:只写模式(清空后再写)           

        a:只追加写模式                   

        +:配合前三种使用,r+、w+、a+,在原来文件模式上增加模式

控制文件读写内容的模式:读写什么格式的文件数据(要与操作模式配合使用)

        t模式:读写都是以字符串(unicode)为单位,只针对文本文件

        b模式:bytes模式/二进制模式,主要用来读写图片和视频。

f = open(文件路径,mode='rt',encoding='utf-8'),f就是一个文件对象

此时变量和打开的文件都会占用内存空间,打开文件占用的操作系统的资源。操作系统的资源不受python管理,并且操作系统打开文件的数量也是有限的。

2、操作文件(读、写)

f.reade()

读取完文件后,文件指针会移动到文件末尾

3、关闭文件

f.close()

4、with语法(上下文管理器),不需要手动关闭文件,并且可以同时打开多个文件

with open('date/a.txt',mode='rt',encodint='utf-8') as f,open('date/a2.txt',mode='rt',encodint='utf-8') as f2:
    res = f.read()
    print(res)

5、文件指针

open():打开文件时文件指针在文件的开头,执行完read()后,文件指针会移动到文件的最后。

f.read():会将整个文件内容读取到内存,但如果文件太大,内存会被占满

6、r模式

文件不存在时会报错

7、w模式

w模式下,如果文件不存在,会创建一个空白文件,并且文件指针也是在文件的开始位置。

文件存在时,会清空文件内容,不要轻易使用w模式打开重要的文件。

f.write('abcd\n'),如果想要换行,就需要手动在最后加\n。

f.write('efg'),此时会在原来的数据后继续写,w模式只会在打开文件时清空文件。

文件未关闭之前可以不停的进行写

8、a模式

文件不存在时会创建一个空白文件,并且文件指针也会在开始位置

当文件存在时,文件指针会直接跳到末尾。

9、+模式

r+:可读可写,以r为准

如果文件不存在会直接报错,

w+:可读可写,以w为准

如果文件不存在会创建文件,写完文件后指针会在末尾,不能直接使用read读取刚写入的数据。

a+:以a为准

如果文件不存在,会创建文件,文件存在文件指针就会跳到末尾。用a+打开文件,虽然也是可读可写,但是如果直接读取也是读不到数据的,必须控制文件的指针位置移动才可以。

x模式:只写模式,不可读,文件不存在就创建文件,文件存在就报错

10、回车和换行

回车:\r

换行:\n

windows:\r\n

linux:\n

python会根据不同的平台将\n转换成对用的回车换行符

11、b模式,不只是针对图片和视频,是对任意格式的文件,b模式下一定不能指定encoding参数

with open('路径',mode='rb') as f:

        res = f.read()      #此时读取到的时bytes类型

b模式写入文件时,需要指定编码格式,t模式下时可以直接写入字符串的,

f.write('中古'.encoding('utf-8')),也可以是其他的编码格式,但是一个文件尽量只用一种编码。

12、read(1024)  一次读取1024个字节,如果循环读取,需要手动判断文件已经读到末尾。

13、readline(一次读一行)、readlines(一次读很多行)

readline:一次读取一行,读取完后,文件指针在读取行的末尾,下次可以继续向后读取

readlines:一次读取所有的行,并传回一个列表。

14、writelines:

并不是写入多行,而是hi做了一个for循环,将多个值一次写入,比如:f.writelines(['a','b','c']),此时文件内容就是:abc。

15、bytes类型

类型转换:b'abc',纯英文和数字的数据可以直接在前面加b做类型转换。

汉字编码的方式:'人'.encoding('utf-8')  或者:bytes('人',encoding = 'utf-8'),两种效果是一样的。

16、flush功能

我们写入数据到文件时,系统不会马上就进行一次IO操作将数据写入文件中,系统存在自己的机制,当数据达到一定数量后才会进行IO操作,因此会存在有的时候我们已经进行了write操作,但是没有立刻在文件中看到数据,就是这个原因,如果你希望在你写操作后,系统能够立刻将数据写入文件,可以使用flush功能,f.flush()调用后,系统会立刻将数据写入文件。一般不会在程序中使用,因为这样会破坏系统的优化机制,一般只有在测试的时候会用。

f.readable():判断文件是否可读

f.writeable():判断文件是否可写

f.closed:判断文件是否关闭

f.encoding:获取文件当前的编码方式

f.name:获取当前的文件名

17、文件指针的移动

文件指针每次移动的单位都是字节,只有在t模式下的read(n),此时的n表示的时字符个数

文件指针移动方法:

f.seek(n,参照位置):

模式0:从该文件的开头位置开始

如:f.seek(5,0)    #5,从文件的开头位置移动五个字节,并停留在第五个字节的位置。

f.seek(2,0)    #2,从文件的开头位置移动2个字节,并停留在第2个字节的位置。

模式1:从当前位置开始移动,不能在t模式下使用

如:f.seek(5,1)    #5,从文件的当前位置移动五个字节,并停留在移动过后的当前位置

模式2:从文件末尾开始移动,此时只能向前移动,不能在t模式下使用

如:f.seek(-5,2)    #5,从文件的末尾位置向前移动五个字节,并停留在移动过后的当前位置

f.tell():获取文件指针的当前位置

18、监控文件数据

tail:用来监控文件新增数据的

19、文件的修改

打开文件时不能使用a模式和w模式,因为a模式时追加模式,无论你如何移动文件指针,写入的数据都会添加到文件末尾,而w模式则会清空文件原来的数据,这是绝对不允许的,一次需要使用r+模式来打开。

硬盘是没有插入数据的这种说法,只会是用新的数据覆盖原来老的数据。

第一种修改文件的方式(文本编辑器均是这种方式)

将文件内容全部读取到内存中并赋给变量,修改变量后再重新写回文件中。这种方式如果文件过大,会对内存占用太大。

第二种修改文件的方式

一次只读一行数据到内存,这时候内存中只有一行数据,之后将这一行数据修改后并且如到一个新的文件中,利用循环将整个文件修改完成后,删除老文件,并将新文件名称修改成老文件名称。

删除文件和修改文件名称:

import os

os.remove('文件内路径')

os.rename('原文件名称','新文件名称')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值