python 读写文件和设置文件的字符编码

一. python打开文件代码如下:

f = open("d:\test.txt", "w")

说明:
第一个参数是文件名称,包括路径;
第二个参数是打开的模式mode

‘r’:只读(缺省。如果文件不存在,则抛出错误)
‘w’:只写(如果文件不存在,则自动创建文件)
‘a’:附加到文件末尾
‘r+’:读写

如果需要以二进制方式打开文件,需要在mode后面加上字符”b”,比如”rb””wb”等

二、python读取文件内容f.read(size)

参数size表示读取的数量,可以省略。如果省略size参数,则表示读取文件所有内容。

f.readline()读取文件一行的内容 f.readlines()读取所有的行到数组里面[line1,line2,…lineN]。

在避免将所有文件内容加载到内存中,这种方法常常使用,便于提高效率。

三、python写入文件f.write(string)

将一个字符串写入文件,如果写入结束,必须在字符串后面加上”\n”,然后f.close()关闭文件

四、文件中的内容定位

f.read()读取之后,文件指针到达文件的末尾,如果再来一次f.read()将会发现读取的是空内容,如果想再次读取全部内容,必须将定位指针移动到文件开始:

f.seek(0)

这个函数的格式如下(单位是bytes):f.seek(offset, from_what) from_what表示开始读取的位置,offset表示从from_what再移动一定量的距离,比如f.seek(10, 3)表示定位到第三个字符并再后移10个字符。

from_what值为0时表示文件的开始,它也可以省略,缺省是0即文件开头。下面给出一个完整的例子:

f = open(‘/tmp/workfile‘, ‘r+‘)
f.write(‘0123456789abcdef‘)
f.seek(5)     # Go to the 6th byte in the file
f.read(1)
f.seek (-3, 2) # Go to the 3rd byte before the end
f.read(1)

五、关闭文件释放资源文件操作完毕,一定要记得关闭文件f.close(),可以释放资源供其他程序使

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

# coding=gbk

f = open(‘c:/intimate.txt‘,‘r‘) # r 指示文件打开模式,即只读
s1 = f.read()
s2 = f.readline()
s3 = f.readlines() #读出所有内容

f.close()

f = open(‘c:/intimate.txt‘,‘w‘) # w 写文件
11 f.write(s1)
12 f.writelines(s2) # 没有writeline
13 f.close()

六. f.writelines不会输出换行符。

python unicode文件读写:

# coding=gbk
import codecs

f = codecs.open(‘c:/intimate.txt‘,‘a‘,‘utf-8‘)
f.write(u‘中文‘)
s = ‘中文‘
f.write(s.decode(‘gbk‘))
f.close()

f = codecs.open(‘c:/intimate.txt‘,‘r‘,‘utf-8‘)
s = f.readlines()
f.close()
for line in s:
    print line.encode(‘gbk‘)

python代码文件的编码

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

  1. # coding=utf-8 ##以utf-8编码储存中文字符
  2. print ‘中文’像上面那样直接输入的字符串是按照代码文件的编码来处理的,如果用unicode编码,有以下2种方式:
    1. s1 = u’中文’ #u表示用unicode编码方式储存信息
    2. s2 = unicode(‘中文’,’gbk’)

unicode是一个内置函数,第二个参数指示源字符串的编码格式。

decode是任何字符串具有的方法,将字符串转换成unicode格式,参数指示源字符串的编码格式。

encode也是任何字符串具有的方法,将字符串转换成参数指定的格式。

python字符串的编码

用 u’汉字’ 构造出来的是unicode类型,不用的话构造出来是str类型

str的编码是与系统环境相关的,一般就是sys.getfilesystemencoding()得到的值

所以从unicode转str,要用encode方法

从str转unicode,所以要用decode

例如:

# coding=utf-8   #默认编码格式为utf-8

s = u‘中文‘ #unicode编码的文字
print s.encode(‘utf-8‘)   #转换成utf-8格式输出
print s #效果与上面相同,似乎默认直接转换为指定编码

我的总结:

u=u‘unicode编码文字‘
g=u.encode(‘gbk‘) #转换为gbk格式
print g #此时为乱码,因为当前环境为utf-8,gbk编码文字为乱码
str=g.decode(‘gbk‘).encode(‘utf-8‘)   #以gbk编码格式读取g(因为他就是gbk编码的)并转换为utf-8格式输出
print str #正常显示中文

安全的方法:

s.decode(‘gbk‘,‘ignore‘).encode(‘utf-8′) #以gbk编码读取(当然是读取gbk编码格式的文字了)并忽略错误的编码,转换成utf-8编码输出

因为decode的函数原型是decode([encoding], [errors=‘strict‘]),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常;

如果设置为ignore,则会忽略非法字符;
如果设置为replace,则会用?取代非法字符;
如果设置为xmlcharrefreplace,则使用XML的字符引用。

时间: 02-28

python 读写文件和设置文件的字符编码的相关文章

python学习笔记第四节(字符编码+文本操作+函数)

python中不存在常量这个意义只能用大写命名来说明这个赋值是个常量,实际均为变量 字符编码 内存中是unicode硬盘中是utf-8中间需要转换 python只有执行的时候才有字符编码的概念python2默认ascii码python3默认unicode 文件操作 写操作,w 没有就新建有则覆盖,a是追加 name 查看文件名encoding 查看字符编码 查看是否可读查看是否可写 true false 以文件字符来显示 seek 移动光标位置,以文件起始来读,字节,以0为单位utf-8三个字符

本地文件读取(csv,txt)时字符编码问题解决

今天进行csv文件读取时,老是入库为空,因为其中有中文字符,我要通过中文字符映射成相应的编号(上升:1011,下降:1012),于是怎么也取不到编号.刚开始以为程序映射出了问题,最后日志打出来后,发现读取的csv文件内容中文全为乱码.啊啊啊,好坑.于是看了下别人写的读取csv文件的代码,果然是没有设置字符编码.通过字符读取文件,转为字节流一定要进行字符编码设置,否则跑到测试环境或生产环境会使用本地默认字符集,那就坑大了. 问题代码: BufferedReader in = new Buffere

python 全栈 python基础 (五)三元运算 字符编码 元组 集合 三级菜单优化!

三元运算 条件判断不能加冒号: a=3 b=5 c=a if a<b else b oct() 转成八进制的简写:16进制 标志:BH为后缀或是0x为前缀hex() 转成16进制 元组 跟列表是一样一样的!但它是只读列表,没有更改的权限! dir() 把传入的数据类型的,所有方法以列表的形式返回.作用: 明确的表示 元组里存储的数据是不应该被修改的!!! list(tuple元组) 变成列表 tuple(list列表) 变成元组 集合 setlinux ={"","&q

Python学习笔记1(变量,字符编码)

跟着老男孩教育Alex的视频学习Python,写博客记录自己的学习过程,记录所讲授的知识点. 此篇微博直接从学习一个程序的仪式感"Hello word"开始写起,例如Python的介绍.发展史.Python2和3的区别.安装.优缺点等,将不会在此记录. 这是我第一次编写博客,不管是内容总结还是外观形式都肯定会有所欠缺.不过这博客主要是给自己记录学习过程的,如果想自学的话,在此推荐给你Alex金角大王和Eric银角大王的微博. 金角大王传送门:http://www.cnblogs.com

Python的学习之旅———基本数据类型(字符编码)

计算机中储存的信息都是用二进制数表示的.通俗的说,按照何种规则将字符存储在计算机中,如'n'用什么表示,称为"编码":反之,将存储在计算机中的二进制数解析显示出来,称为"解码".在解码过程中,如果使用了错误的解码规则,则导致'n'解析成'm'或者乱码. 使用字符编码声明,并且同一工程中的所有源代码文件使用相同的字符编码声明. 这点是一定要做到的. python3 抛弃str,全部使用unicode. 按引号前先按一下u最初做起来确实很不习惯而且经常会忘记再跑回去补.

Python小白学习之路—变量、字符编码、字符拼接

变量命名规则: (1)变量名只能是字母,数字,下划线的任意组合. ex:_amber_666NAme (2)关键字不能声明为变量名 ex:['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not'

eclipse设置字体、字符编码、快捷键

1.设置字体: preferences->general->appearnce->colors and fonts->edit->字体大小14,字形常规,字体Consolas 2.设置字符编码: general->workspace->other:选择utf-8,apply 3.设置快捷键 图片如下所示: 一些常用的快捷键: alt+/ 代码助手完成一些代码的插入 Ctrl+1 快速修复 Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一

python字符编码文件

字符编码发展 ASCII 255   只支持英文字母和数字,特殊字符   1bytes Unicode     中文和英文               统一2bytes utf-8      中文>3bytes  英文>1bytes bytes类型 文本数据总是unicode由str类型表示,二进制数据则由bytes类型表示 二进制数据用在视频,音频文件以及发送socket网络传输数据等 字符串转成二进制  str.encode("encoding=utf-8") 二进制转

Python基础(字符编码与文件处理)

一.了解字符编码的知识储备 1.计算机基础知识(三副图) 2.文本编辑器存取文件的原理(notepad++,Pycharm,word) 打开编辑器就启动了一个进程,是在内存中运行的,所以在编辑器写的内容在没保存之前都是存放在内存中的,断电后数据就会丢失.因而需要保存到硬盘上,点击保存按钮,就从内存中把数据刷到硬盘上. 3.Python解释器执行py文件的与原理,例如python test.py 第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器. 第二阶段:python解释器相当