Python中字符集编码和文件读写实现程序

python中默认编码是ASCII,可以通过以下方式设置和获取:

import sys
print sys.getdefaultencoding()
sys.setdefaultencoding('gbk')但直到python重新启动后新的默认编码才会生效,我试了一下,setdefaultencoding总是会出错,没有这个属性。用dir看,确实没有,python版本是2.5,不知道是否被取消了。

使用print来输出时,python将内容传递给系统处理,windows会按照系统默认编码来输出。如果包含了中文,就要注意几点。

1 python代码文件的编码
py文件默认是ASCII编码,中文在显示时会做一个ASCII到系统默认编码的转换,这时就会出错:SyntaxError: Non-ASCII character。需要在代码文件的第一行或第二行添加编码指示:

 代码如下 复制代码
1 # coding=gbk
2 print '中文'
2 字符串的编码

像上面那样直接输入的字符串是按照代码文件的编码来处理的,如果是unicode编码,有以下三种方式:

 代码如下 复制代码
1 s1 = u'中文'
2 s2 = unicode('中文','gbk')
3 s3 = s1.decode('gbk')

unicode是一个内置函数,第二个参数指示源字符串的编码格式。
decode是任何字符串具有的方法,将字符串转换成unicode格式,参数指示源字符串的编码格式。
encode也是任何字符串具有的方法,将字符串转换成参数指定的格式。

3 系统的默认编码
对 于中文系统来说,默认的是gbk,gb2312也可以,因为它是gbk的字集。使用print输出时,字符串会被转换成此格式,隐式转换时,是从代码文件 编码格式转换成gbk,默认是ASCII->GBK。考虑上面第二点,如果字符串编码不是ASCII,则隐式转换会出错,需要显式转换,使用 encode方法。如果指定了代码文件格式为gbk,则隐式转换不存在问题。

 代码如下 复制代码
1 # coding=gbk
2
3 s = u'中文'
4 print s.encode('gbk')

文件读写

--------------------------------------------------------------------------------
只是ASCII或者gbk编码格式的的文件读写,比较简单,读写如下:

 代码如下 复制代码
 1 # coding=gbk
 2
 3 f = open('c:/intimate.txt','r') # r 指示文件打开模式,即只读
 4 s1 = f.read()
 5 s2 = f.readline()
 6 s3 = f.readlines() #读出所有内容
 7
 8 f.close()
 9
10 f = open('c:/intimate.txt','w') # w 写文件
11 f.write(s1)
12 f.writelines(s2) # 没有writeline
13 f.close()

f.writelines不会输出换行符。
unicode文件读写:

 

 代码如下 复制代码
1 # coding=gbk
 2 import codecs
 3
 4 f = codecs.open('c:/intimate.txt','a','utf-8')
 5 f.write(u'中文')
 6 s = '中文'
 7 f.write(s.decode('gbk'))
 8 f.close()
 9
10 f = codecs.open('c:/intimate.txt','r','utf-8')
11 s = f.readlines()
12 f.close()
13 for line in s:
14     print line.encode('gbk')
时间: 2024-10-23 02:40:08

Python中字符集编码和文件读写实现程序的相关文章

Python中如何在一个.py文件中调用另一个.py中的列表中的内容

问题描述 Python中如何在一个.py文件中调用另一个.py中的列表中的内容 比如在a.py中如何调用b.py中的列表T=[1,2,3,4,5]中的数字 解决方案 一般不要直接在模块之间传递变量等,你应该通过函数的方式,用参数来传递 a.py调用b.py中的一个函数,参数是T这个列表 解决方案二: 0.0不知道..... 解决方案三: python中shell调用py文件的内容 解决方案四: 首先,被调用的那个.py文件应该在一个模块里,举个例子: 你有两个文件a.py和b.py,a.py里有

Python中字符编码简介、方法及使用建议_python

1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号.不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础. 1.2. MBCS 然而计算机世界里很快就有了其他语言,单字节的ASCII已无法满足需求.后来每个语言就制定了一套自己的编码,由于单字节

在Python中封装GObject模块进行图形化程序编程的教程_python

Python 是用于编码图形界面的极佳语言.由于可以迅速地编写工作代码并且不需要费时的编译周期, 所以可以立即使界面启动和运行起来,并且不久便可使用这些界面. 将这一点与 Python 易于链接本机库的能力结合起来,就可以形成一个出色的环境. gnome-python 是为 Python 封装 GNOME 及其相关库的软件包. 这使您能够用 Python 编写外观与核心 GNOME 应用程序完全相同的应用程序,而所花的时间只是用 C 编写该应用程序所花的一部分. 然而,不用 C 进行编程会有一个

php文件读写实例程序

PHP如何读文件 file_get_contents() 函数把整个文件读入一个字符串中. 例子  代码如下 复制代码 <?php echo file_get_contents("test.txt"); ?> 输出: This is a test file with test text. 在PHP打开了文件之后就需要对文件进行读取,一般是使用fgets()函数. 该函数可以从文件中每次读取一行内容,其不断读入数据,值到遇到本行的换行符,或者全文的结束符号EOF. 介于fge

整理几个用Python写的比较两文件差异的程序【推荐】

Python写的比较2个文件不同的程序,如果其中有1个文件不同,就会返回第一个不同的地方的行号和列号. 下面给出比较文件的Python源代码:  代码如下 复制代码 # 用Python比较两个文件 # 如果相同返回0 def cmpstr(str1, str2):     col = 0     for c1, c2 in zip(str1, str2):         if c1 == c2:             col += 1             continue        

简单掌握Python中glob模块查找文件路径的用法_python

glob使用UNIX shell规则查找与一个模式匹配的文件名.只要程序需要查找文件系统中名字与某个模式匹配的一组文件,就可以使用这个模块. glob的模式规则与re模块使用的正则表达式不相同.glob模式遵循标准UNIX路径扩展规则.只是用几个特殊字符来实现两个不同的通配符和字符区间.模式规则要应用于文件名中的段.模式中的路径可以是相对路径或绝对路径. shell变量名和波浪线都不会扩展. 基本用法 1.glob.glob(pathname), 返回所有匹配的文件路径列表.它只有一个参数pat

Python中使用Inotify监控文件实例_python

Inotify地址:访问 # -*- coding:utf-8 -*- import os import pyinotify from functions import * WATCH_PATH = '' #监控目录 if not WATCH_PATH: wlog('Error',"The WATCH_PATH setting MUST be set.") sys.exit() else: if os.path.exists(WATCH_PATH): wlog('Watch statu

python中的编码问题解决方法

在py2.7的项目中用了__future__模块中的 unicode_literals 来为兼容py3.x做准备,今天遇到一个UnicodeEncodeError的错误,跟了下,发现这个小坑值得注意.是怎么样的一个坑呢?跟着代码看看.顺便深究一下原理. 1. 未引入unicode_literals版本  代码如下 复制代码 #coding:utf-8 from datetime import datetime now = datetime.now() print now.strftime('%m

查询 文件读写-java程序字符串问题(求大牛帮忙)

问题描述 java程序字符串问题(求大牛帮忙) 一个文件夹中(可能包含多个文本文件或子文件夹),查询其中包含关键字(至少一个)的文本文件然后输出这个文本文件的路径和所包含的关键字.关键字也存放在一个文本文件当中.不知程序该怎么写(java菜鸟,求大牛帮忙).关键字不区分大小写,一般只有字母和ASCII码组成,要忽略空格.最后的结果也要输出在一个文本文件上 解决方案 这个的话 第一个就这么个思路了 1:写一个递归算法 遍历到当前文件夹下的所有子文件(包括文件夹) 如果是文本文件的话则调用查找关键字