zoukankan      html  css  js  c++  java
  • Python编码及文件练习题

    Python编码及文件练习题

    1,编码问题
    (1)请问python2与python3中的默认编码是什么?

    python 2.x默认的字符编码是ASCII,默认的文件编码也是ASCII
    python 2.x默认的字符编码是unicode,默认的文件编码也是utf-8
    (2)为什么会出现中文乱码,你能举例说明乱码的情况有哪几种?

    无论以什么编码在内存里显示字符,存到硬盘上都是2进制,所以编码不对,程序就会出错了。
    (ascii编码(美国),GBK编码(中国),shift_JIS编码(日本),,,,)
    要注意的是,存到硬盘上时是以何种编码存的,再从硬盘上读出来时,就必须以何种编码读,要不然就乱了。。

    常见的编码错误的原因有:
      python解释器的默认编码
      Terminal使用的编码
      python源文件文件编码
      操作系统的语言设置,掌握了编码之前的关系后,挨个排错就ok
    (3)如何进行编码转换?

    如果想要中国的软件可以正常的在美国人的电脑上实现,有下面两种方法:
    1,让美国人的电脑都装上gbk编码
    2,让你的软件编码以utf-8编码

    第一种方法不可现实,第二种方法比较简单,但是也只能针对新开发的软件,
    如果你之前开发的软件就是以gbk的编码写的,上百万行代码已经写出去了,
    重新编码成utf-8格式也会费很大力气。
    所以,针对已经用gbk开发的软件项目如何让项目在美国人的电脑上正常显示
    还记得unicode的一个功能就是其包含了跟全球所有国家编码的映射关系,
    所以无论你以什么编码存储的数据,只要我们的软件把数据从硬盘上读到内存,
    转成unicode来显示即可,由于所有的系统,编程语言都默认支持unicode,
    所有我们的gbk软件放在美国电脑上,加载到内存里面,变成了unicode,中文就可正常展示
    (4)#_*_coding:utf-8_*_ 的作用是什么?

    #_*_coding:utf-8 _*_ 的作用是.py文件是什么编码,就需要告诉python用什么编码去读取这个.py文件
    (5)解释python2.x bytes与python3.x bytes的区别

    简单点说:

    Python 2 将 strings 处理为原生的 bytes 类型,而不是 unicode,
    Python 3 所有的 strings 均是 unicode 类型。

    在python2.x中,写字符串,比如
    >>>s = ”学习“
    >>>print s
    学习
    >>>s
    'xd1xa7xcfxb0'


    虽然说打印的是学习,但是直接调用的变量s,确实一个个16进制表示的二进制字节,
    我们称这个为byte类型,即字节类型,它把8个二进制一组称为一个byte,用16进制表示
    所以说python2.x的字符串其实更应该称为字符串,通过存储的方式就能看出来,
    但是在python2.x中还有一个bytes类型,两个是否相同呢,回答是肯定的,在python2.x中,bytes==str


    python3.x中
    把字符串变成了unicode,文件默认编码编程了utf-8,这意味着,只要用python3.x,
    无论我们的程序以那种语言开发,都可以在全球各国电脑上正常显示。
    python3.x除了把字符串的编码改成了unicode,还把str和bytes做了明确区分,
    str就是unicode格式的字符串bytes就是单纯的二进制
    (补充一个问题,为什么在python3.x中,把unicode编码后,字符串就变成了bytes格式
    ,为什么不直接打印成gbk的字符,我觉得就是想通过这样的方式明确的告诉你,想在python3.x中看字符,
    必须是unicode,其他编码一律是bytes格式)
    2,文件处理、

    (1) r和rb的区别是什么?

    文件操作时候,以“r"或者”rb"模式打开,只能读取,无法写入;
    硬盘上保存的文件都是某种编码的0101010,打开时需要注意:
    rb,直接读取文件保存时原生的0101010,在Python中用字节类型表示
    r和encoding,读取硬盘的0101010,并按照encoding指定的编码格式进行断句,
    再将“断句”后的每一段0101010转换成unicode的 010101010101,在Python中用字符串类型表示
    (2)解释一下下面三个参数的作用分别是什么?

    open(f_name,'r',encoding="utf-8")

    f_name 是文件的路径,mode是打开的方式,encoding是编码格式
    encoding #文件编码
    mode #打开模式
    name #文件名
    newlines #文件中用到的换行模式,是一个tuple
    softspace #boolean型,一般为0,据说用于print
    (3) w和wb的区别是什么?

    文件操作时候,以 “w”或“wb” 模式打开,则只能写,并且在打开的同时会先将内容清空。
    写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:
    wb,写入时需要直接传入以某种编码的0100101,即:字节类型
    w 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码
    将unicode字符串转换为该编码的 010101010
    (4)a和ab的区别是什么?

    文件操作时,以 “a”或“ab” 模式打开,则只能追加,即:在原来内容的尾部追加内容
    写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:
    ab,写入时需要直接传入以某种编码的0100101,即:字节类型
    a 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码
    将unicode字符串转换为该编码的 010101010
    (5)readline和readlines的区别

    readline() #读取一行

    readlines() #读取所有内容,并返回列表(一行为列表的一个元素值)

    练习题1 —— 全局替换程序:

    写一个脚本,允许用户按以下方式执行时,即可以对指定文件内容进行全局替换

    `python your_script.py old_str new_str filename`
    替换完毕后打印替换了多少处内容

    练习题2 —— 模拟登陆:

    用户输入帐号密码进行登陆
    用户信息保存在文件内
    用户密码输入错误三次后锁定用户,下次再登录,检测到是这个用户也登录不了

    user_name = 'alex'
    password = 123
    user_info = {}
    count = 0
    f = open('saa.txt.new', 'r+', encoding='utf-8')
    file = f.read()
    f.close()
    print('请登陆'.center(30, '*'))
    while count < 3:
    name = input('请输入用户名 : ')
    key = input('请输入密码 : ')
    key = int(key)
    if name in file:
    print('你的用户被锁定了')
    break
    elif name not in file:
    if name == user_name and key == password:
    print('登陆成功'.center(30, '-'))
    f2 = open('saz.txt', 'w', encoding='utf-8')
    user_info[user_name] = password
    f2.write(str(user_info))
    f2.close()
    break
    else:
    print('用户名或密码错误,请再试%s次' % (2-count))
    count += 1
    if count == 3:
    print('你的账户已被锁定'.center(30, '*'))
    f = open('saa.txt.new', 'r+', encoding='utf-8')
    file = f.write(name)
    f.close()
      

  • 相关阅读:
    java在线预览txt、word、ppt、execel,pdf代码
    java读写文本文件大全
    经典SQL语句大全
    javascript和jQuery知识点总结
    30条经典的SQL语句
    js 树菜单
    一天一记
    笔记本驱动的安装事项[acer]
    拒绝买房的八大理由
    javascript 常用类
  • 原文地址:https://www.cnblogs.com/Murraya/p/10591708.html
Copyright © 2011-2022 走看看