python 入门 笔记 二
官方文档:https://docs.python.org/3.5/library/logging.html
python2 与 python3的区别 (菜鸟教程)
robotframwork官网上说python2与python3的区别
Python 2和Python 3大多是相同的语言,但它们彼此不完全兼容。主要的区别在于,在Python 3中,所有字符串都是Unicode,而在Python 2中,字符串默认是字节,但是还有其他几个向后不兼容的更改。最后一个Python 2版本是2010年发布的Python 2.7,将在2020年之前得到支持。
python2,python3中文编码对比
Python2中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。(python3没有报错啊)
解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了
python2 代码中包含中文,就需要在头部指定编码。
注意:Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。(但是utf-8的文件又分有 BOM的,无BOM的,python3的)
注意:如果你使用编辑器,同时需要设置 py 文件存储的格式为 UTF-8,否则会出现类似以下错误信息:
SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xc4 in position 0:
【Python】使用codecs模块进行文件操作及消除文件中的BOM
UTF-8文件的Unicode签名BOM(Byte Order Mark)问题记录(EF BB BF)
个人建议:
Python3直接用open。
Python2.x下用codecs.open,特别是有中文的情况,然后也可以避免踩到2.6下面io.open的坑。
如果希望代码同时兼容Python2和Python3,那么推荐用codecs.open。
编码不统一的报错如下
>>> fr = open('test.txt','a')
>>> line2 = u'我爱祖国'
>>> fr.write(line2)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
fr.write(line2)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128)
UTF-8文件中的BOM检测及消除
然后继续我们今天的另外一个主题,怎么样消除UTF-8文件中的BOM(Byte Order Mark),十六进制编码(EF BB BF),博主的方法有些取巧但是也比较高效,主要用到了codecs的函数BOM_UTF8,如果发现BOM_UTF8,则直接改写文件内容。
import codecs
with open(config_path) as source_file:
data = source_file.read()
# remove BOM
if data[:3] == codecs.BOM_UTF8: # 判断是否为带BOM文件
data = data[3:]
with codecs.open(config_path) as dest_file:
dest_file.write(data)
ConfigParser读ini配置文件 ,写ini配置文件
section, option, value是什么意思?
基本的读取操作:
- -read(filename) 直接读取文件内容
- -sections() 得到所有的section,并以列表的形式返回
- -options(section) 得到该section的所有option
- -items(section) 得到该section的所有键值对
- -get(section,option) 得到section中option的值,返回为string类型
- -getint(section,option) 得到section中option的值,返回为int类型,还有相应的getboolean()和getfloat() 函数。
基本的写入操作:
- -write(fp) 将config对象写入至某个 .init 格式的文件 Write an .ini-format representation of the configuration state.
- -add_section(section) 添加一个新的section
- -set( section, option, value) 对section中的option进行设置,需要调用write将内容写入配置文件
- -remove_section(section) 删除某个 section
- -remove_option(section, option)
#注意python2是:import ConfigParser,python3是: import configparser
import ConfigParser
import sys
config=ConfigParser.ConfigParser() # 实例化configParser对象
config.add_section("book") #添加1个section
config.set("book","title","这是标题") #设置section的option的value值
config.set("book","author","大头爸爸")
config.add_section("size") #添加1个section
config.set("size","size",1024) #设置section的option的value值
config.write(sys.stdout)
执行结果
[book]
title = 这是标题
author = 大头爸爸
[size]
size = 1024
上一篇: UnityShader入门笔记(二)
下一篇: Go 面试每天一篇(第 72 天)