python 文件与编码

python 文件与编码

文件打开模式

r: 只读模式(默认)
w: 只写模式(不可读,不存在则创建,存在则删除内容;)
a: 追加模式(可读,不存在则创建,存在则只内容;)
r+: 读写模式
相当于追加模式;相比较a,r+表示追加+读
可以定长修改;文件开头改
w+: 写读模式
会先清空原文件内容,再写入新内容;
a+: 追加写模式
可文件尾部改;
rU:
将\r \n \r\n自动转换成\n;
rb:
二进制的模式读取;不进行转码与编码,直接打印字节类型;
主要用于网络传输;有助于解决乱码问题;bytes对应于ascii里面的数字;最后需要再解码;
 
以二进制模式打开文件,不能声明encoding
示例:
 
    >>> a = bytes('abc',encoding='utf-8')
    >>> a
    b'abc'
    >>> a[0]
    97
    >>> a[1]
    98
wb:
在写入的时候,必须编码:f.write('城'.encode('gbk'))
以二进制写入文件,必须写入bytes格式;

 文件使用方法

open()
encoding如果不声时,默认使用操作系统的编码来解释文件;
f.tell()
返回光标位置;
f.seek(10)
移动光标到第10个字节
print(f.read(5))
表示读取5个字符;
  注:
  一个汉字占三个字节;f.seek(10)移动的是字节;f.read(5)读的是字符;
f.fileno()
返回一个nummber,number是操作系统里所有打开的文件的一个下标;又称为文件描述符;
f.isatty()
判断是否为一个终端;
<br>示例:
    >>> import sys
    >>> sys.stdout.write('fsdjklj')
    fsdjklj7 #数字表示显示打印了几个字符;
 
f.read():
文件内容全部读完
f.readable()
判断文件是否可读
f.readall()
读所有
f.seekable()
seek只适用于文本文件;
f.truncate()
用于r+或a+;表示默认从开头进行截断;结果在文件中显示;不能使用seek在某一位置截断;
f.flush()
将内存缓存区中的文件内容刷写到文件中去;常用于打印实时日志时;

编码

python2:默认编码assci
#-*-coding:utf-8 -*- 告诉py的解释器,后面的这段代码请用utf8来解释

python3:文件的默认编码是utf-8
解释器编码是unicode,文件加载到内存后会自动解码成unicode,同时把字符转换成bytes = 8bits,只有在保存下来的时候需要编码
查看python默认的字编码命令:
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

 不同国家的字符编码进行正常显示,先将本机的字符编码进行解码到unicode,读取时再将unicode编码转换成自己的字符编码;

                                                   

 

注:

    python2与python3中编码的区别:

  python2 str == python3 bytes
  python3 str == unicode
  python3中的bytes格式是一个单独的数据类型;

编码解码:
windows默认编码gbk, 默认可支持unicode & gbk
windows默认编码utf8,默认可支持unicode & utf8
所有的程序在内存里默认是unicode
python2: 解码是必须的,编码成gbk不是必须的。
python2: 在linux上,如果是gbk --> utf8 ,解码是必须的,编码成utf-8这个动作不是必须的。
python3:不需要解码,直接编码就可以。

转载于:https://www.cnblogs.com/Pangjn/p/6373862.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值