zoukankan      html  css  js  c++  java
  • Python编码和文件操作

    Python编码的历史:

    二进制

    ascll:只能存英文和拉丁字符,一个字符占一个字节,8位

    gb2312:只能存6700多个中文,1980年

    gbk1.0:存了2万多字符,1995年

    gb18030:存了27000多个中文,2000年

     

    万国码(Unicode):utf-32:是一个任意字符占4个字节的编码

    utf-16:占两个字节或两个以上,65535,极个别不够用

    utf-8(可变长编码):一个英文用ascll来存,一个中文占3个字节

     

    in Python2:默认编码是ascll

    inPython3:默认编码是Unicode,文件编码是utf-8

    encode在编码的同时,会把数据转成bytes类型,在解码的同时会把bytes转成字符串(b=bytes=字节类型)

     1 #in py2
     2 s='特斯拉'
     3 s_to_unicode=s.decode("utf-8")
     4 unicode_to_gbk=s_to_unicode.encode("gbk")
     5 print(s)
     6 print("unicode:",s_to_unicode)
     7 print("gbk:",unicode_to_gbk)
     8 
     9 gbk_to_unicode=unicode_to_gbk.decode("gbk")
    10 unicode_to_utf-8=gbk_to_unicode.encode("utf-8")
    11 print(gbk_to_unicode)
    12 print(unicode_to_utf-8)
    13 
    14 #in py3
    15 s="i like 特斯拉"
    16 s_to_gbk=s.encode("gbk")
    17 print(s)
    18 print(s_to_gbk.decode("gbk"))

    文件操作:

    能调用方法的一定是对象。

    创建对象: f=open('小重山','r',encoding='utf8')

    三种基本操作模式:r(只可读),w(只可写),a(追加)

    步骤:1、创建文件对象,2、调用文件方法进行操作,3、关闭文件(如果不关闭,数据会在缓存中,而不在磁盘)

    read():参数写几就是读几个字符,一个汉字占一个字符

    写模式是不可读的,读模式不能写

    写模式在创建对象的同时会把原来的内容清空,如果文件不存在会创建新的文件

    文件的操作方法:

    f.readline():读出的是一行

    f.readlines():读出的是全部内容,放在一个列表中

    f.tell():识别光标的位置,中文默认一个占3个一个英文占一个

    f.seek():调整光标的位置

    f.flush():同步把缓存的内容放入磁盘

    f.truncate():默认从开始位置截断所有的内容(在w模式下:先清空,再写,再截断,在a模式下:直接将指定位置后的内容截断)

     1 #对文件进行操作:
     2 '''
     3 昨夜寒蛩不住鸣。
     4 惊回千里梦,已三更。
     5 起来独自绕阶行。
     6 人悄悄,帘外月胧明。
     7 白首为功名,旧山松竹老,阻归程。
     8 欲将心事付瑶琴。
     9 知音少,弦断有谁听。
    10 '''
    11 #在第六行后面加i like it
    12 f=open('小重山2','r',encoding='utf8')
    13 number = 0
    14 for i in data:
    15      number += 1
    16      if number == 6:
    17          i = ''.join([i.strip(), 'i like it'])  # 取代万恶的+
    18      print(i.strip())
    19  f.close()
    20 
    21 #对于大数据文件,要用以下方式
    22 number=0
    23 for i in f:
    24     number+=1
    25     if number==6:
    26         i=''.join([i.strip(),'uygyuy'])
    27     print(i.strip())

    文件模式:
    r(读模式) w(写模式) a(追加模式)
    r+:读写模式,读后写的内容是在内容的最后,光标定位在开始的位置

    f=open('小重山','r+',encoding='utf8')
    print(f.readline())
    f.write('岳飞')
    f.close()

    w+:写读模式,写前先清空,写了之后光标定位在写的最后位置,仍然读不到内容,要想读到所写的内容需要移动光标的位置

    f=open('小重山','w+',encoding='utf8')
    f.write('岳飞')
    print(f.tell())
    f.seek(0)
    print(f.readline())
    f.close()

    a+:追加读模式,追加之后光标定位在最后的位置,读是从最后的位置开始读

    f=open('小重山','a+',encoding='utf8')
    print(f.tell())
    f.seek(0)
    print(f.readline())
    f.close()

    终极问题 如何在磁盘修改文件
     常规思路,由于磁盘存储机制不能完成
     number=0
     for line in f:
     number+=1
     if number==3:
     f.write('alex')


    只能采取重新创建一个文件的思路
     f_read=open('小重山','r',encoding='utf8')
     f_write = open('小重山2','w',encoding='utf8')

     number=0
     for line in f_read:
     number+=1
     if number==5:
     line=''.join([line.strip(),'alex '])
     f_write.write(line)

     f_read.close()
     f_write.close()

    with 同时管理多个文件对象:
      with open('log1','r') as f_read, open('log2','w') as f_write:
      for line in f_read:
      f_write.write(line)

  • 相关阅读:
    js图片飘动
    实战ASP.NET大规模网站架构:Web加速器(1)【转】
    DNS服务器设置详解
    Lucene:基于Java的全文检索引擎简介【转】
    传道解惑 软件开发技术名词解密(转载)
    UTF8 and Unicode FAQ
    高并发 高负载 网站系统架构 !深入讨论!【转载】
    (转)值的关注的Java开源项目
    MSDN:Webcast 系列课程
    ASP.NET MVC 学习网站
  • 原文地址:https://www.cnblogs.com/cxli99/p/8433243.html
Copyright © 2011-2022 走看看