python-编码和文件操作

在这里插入代码片@[toc]

1、encoding

  • 常见编码
    • ASCII:不支持中文,支持英文、数字、符号;使用1个字节
    • GBK(国标):支持中文、英文、数字、符号;使用2个字节(英文中文都一样)
    • unicode(万国码):支持中文、英文、数字、符号;使用4个字节(英文中文都一样)
    • utf-8(长度可变的万国码):支持中文、英文、数字、符号
      • 英文(使用1个字节);中文(使用3个字节)
  • 编码相关知识
    • python3中,程序运行期间,使用的都是unicode,显示所有的内容
    • Pycharm中默认为utf-8
    • 传输和存储都是使用bytes类型,格式为b’编码后的内容’
  • encode() 编码函数
  • decode() 解码函数
In [77]: s = 'I am hhh'

In [79]: s.encode()
Out[79]: b'I am hhh'

In [80]: s = b'I am hhh'

In [81]: s.decode()
Out[81]: 'I am hhh'

2、file

(1)文件操作的函数

  • 文件是可迭代对象
  • 文件的操作是根据光标位置进行的
  • 文件分为文本文件和非文本文件
    • 文本文件
      • open([路径], mode="r/w/a", encoding="字符集(编码解码方式)") 打开一个文件
      • 关于路径:
        • 绝对路径,包括本机和互联网的路径(多用于服务器,如log)
        • 相对路径,相对于本程序的路径(../表示上一级目录./表示本级目录)
      • file.read([number]) 返回整个文件,number为读取的字符个数
      • file.readline() 返回一行
        • 文件是可迭代对象,可以用for循环读文件
      • file.write() 往文件里写入(可用模式为w、a)
    • 非文本文件
      • open([路径], mode="rb/wb/ab") 打开非文本文件,注意操作非文本文件时不要加encoding
  • file.close() 关闭文件,打开文件后一定要关闭文件
In [82]: f = open('./test.txt', mode='w', encoding='utf-8')

In [83]: f.write('aaaa\nbbbb\ncccc')
Out[83]: 14

In [84]: f.close()

In [85]: f = open('./test.txt', mode='r', encoding='utf-8')

In [86]: for line in f:
    ...:     print(line)  # 这里print语句会自动加一个换行符,所以结果多输出了一个换行符
    ...:     
aaaa

bbbb

cccc

In [87]: f.close()

(2)文件操作的模式

  • 模式:r, w, a, a+, w+, a+, rb, wb, ab, r+b, w+b, a+b
    • r:只读(光标默认从文件开头开始)
    • w:写操作,会清空原文件,如果原文件不存在会创建新文件
    • a:追加,即append
    • b:bytes,处理非文本文件
    • r+:在读后可以直接进行其它操作(读写同时存在模式)
      • 注意:无论读取了多少内容,写入的内容都在末尾
    • w+:写读模式
      • 注意:写后光标在最末尾,要读取的话需要移动光标
    • a+:同w+
    • r+b, w+b, a+b:操作非文本文件,类似r+、w+、a+

(3)常用操作

  • 光标(seek)
    • fiel.seek([偏移量], [偏移量参考位置])
      • 0表示开始处,1表示当前位置,2表示末尾处
    • file.seek(0) 移动光标到文件开始处
    • file.seek(0, 2) 移动光标到末尾
  • file.tell() 返回光标当前位置
  • file.truncate([number]) 截断操作,从文件开头截断到number处,默认截断到光标处

(4)文件操作

  • 使用下面方式打开文件,可以不用写close

    with open(...) as f1 [, open(...) as f2, ...]:
        pass
    
    • 这样写的话,文件对象就是f1 f2 ···
    • 可以打开多个文件
    • 该语法实际上是触发了文件对象的__enter__()方法和__exit__()方法
  • import os 导入os模块

    • os.remove("file_name") 删除文件
    • os.rename("file_name") 重命名文件
  • 修改文件:

    • 打开文件和文件副本
    • 读取文件,写入副本
    • 删除原文件,重命名副本
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值