Python文件的读写及文件字符编码设置方法详解

文件读写操作在各种编程语言中都是比较重要的部分,也是很常用的部分,今天就来详细说一下python对文件的读写操作,以及需要注意的点。

一. python打开文件

代码如下:

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

登录后复制

说明:

第一个参数是文件名称,包括路径;

第二个参数是打开的模式mode

立即学习“Python免费学习笔记(深入)”;

‘r’:只读(缺省。如果文件不存在,则抛出错误)

‘w’:只写(如果文件不存在,则自动创建文件)

‘a’:附加到文件末尾

‘r+’:读写

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

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

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

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

f = open('./pythontab.txt', 'r')content = f.read()print content

登录后复制

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

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

将一个字符串写入文件

f = open('./pythontab.txt', 'r+')f.write('Hello, Pythontab.com')f.close()

登录后复制

注意: 如果写入结束,可以在字符串后面加上””来表示换行,最后必须用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('./pythontab.txt', 'r+')f.write('Hello, Pythontab.com')f.seek(5)     # 定位到第6个bytef.read(1)        f.seek (-3, 2) #定位到第2个字符并再向前移动3个字符f.read(1)

登录后复制

五、关闭文件

关闭文件释放资源文件操作完毕,一定要记得关闭文件f.close(),可以释放资源供其他程序使只是ASCII或者gbk编码格式的的文件读写,比较简单,读写如下:

# coding=gbkf = open('./pythontab.txt','r') # r 指示文件打开模式,即只读s1 = f.read()s2 = f.readline()s3 = f.readlines() #读出所有内容f.close()f = open('./pythontab.txt','w') # w 写文件11 f.write(s1)12 f.writelines(s2) # 没有writeline13 f.close()

登录后复制

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

python unicode文件读写:

# coding=gbkimport codecsf = codecs.open('./pythontab.txt','a','utf-8')f.write(u'中文')s = '中文'f.write(s.decode('gbk'))f.close()f = codecs.open('./pythontab.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。需要在代码文件的第一行或第二行添加编码指示:

# coding=utf-8 ##以utf-8编码储存中文字符

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

s1 = u’中文’ #u表示用unicode编码方式储存信息

s2 = unicode(‘中文’,’gbk’)

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

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

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

python字符串的编码

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

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

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

从str转unicode,所以要用decode

例如:

# coding=utf-8   #默认编码格式为utf-8s = 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的字符引用。

以上就是Python文件的读写及文件字符编码设置方法详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2266954.html

(0)
上一篇 2025年2月27日 09:42:23
下一篇 2025年2月18日 06:45:56

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python防止sql注入方法介绍

    前言 web漏洞之首莫过于sql了,不管使用哪种语言进行web后端开发,只要使用了关系型数据库,可能都会遇到sql注入攻击问题。那么在python web开发的过程中sql注入是怎么出现的呢,又是怎么去解决这个问题的? 当然,我这里并不想讨…

    编程技术 2025年2月27日
    200
  • python判断视频是否为mp3格式的方法介绍

    项目中使用mp3格式进行音效播放,遇到一个mp3文件在程序中死活播不出声音,最后发现它是wav格式的文件,却以mp3结尾。要对资源进行mp3格式判断,那么如何判断呢,用.mp3后缀肯定不靠谱,我们知道扩展名是可以任意修改的,得从编码格式判断…

    编程技术 2025年2月27日
    200
  • Python装饰器之property用法详解

    @property装饰器能把一个方法变成属性一样来调用,下面我们就一起来看看python黑魔法@property装饰器的使用技巧解析 @property有什么用呢?表面看来,就是将一个方法用属性的方式来访问. 上代码,代码最清晰了. cla…

    编程技术 2025年2月27日
    200
  • python 装饰器

    之前就了解到了装饰器, 但是就会点皮毛, 而且对其调用方式感到迷茫,正好现在的项目我想优化,就想到了用装饰器, 因此深入研究了下装饰器. 先看下代码: import time# 将函数作为参数传入到此方法….def timeif(fun…

    2025年2月27日
    200
  • Python中关于input和raw_input的比较

    这篇文章主要介绍了python中input与raw_input 之间的比较的相关资料,通过本文希望能帮助到大家,对于他们之间的使用方法和区别,需要的朋友可以参考下 Python中input与raw_input 之间的比较 input和raw…

    编程技术 2025年2月27日
    200
  • Python中关于str与repr的使用详解

    这篇文章主要介绍了python 基础教程之str和repr的详解的相关资料,主要说明他们之家的区别,通过此文希望能帮助到大家,帮助大家理解这部分内容,需要的可以参考下 Python str和repr的详解 str可以将值转化为合理的字符串形…

    编程技术 2025年2月27日
    200
  • Python如何实现爬取需要登录的网站代码实例

    这篇文章主要介绍了python实现爬取需要登录的网站,结合完整实例形式分析了python登陆网站及数据抓取相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python爬取需要登录的网站实现方法。分享给大家供大家参考,具体如下: impor…

    编程技术 2025年2月27日
    200
  • Python使用四种方法实现获取当前页面内所有链接的对比分析

    这篇文章主要介绍了python获取当前页面内所有链接的方法,结合实例形式对比分析了python常用的四种获取页面链接的方法,并附带了iframe框架内链接的获取方法,需要的朋友可以参考下 本文实例讲述了Python获取当前页面内所有链接的四…

    编程技术 2025年2月27日
    200
  • Python中关于numpy灵活定义神经网络结构的实例

    这篇文章主要介绍了python基于numpy灵活定义神经网络结构的方法,结合实例形式分析了神经网络结构的原理及python具体实现方法,涉及python使用numpy扩展进行数学运算的相关操作技巧,需要的朋友可以参考下 本文实例讲述了Pyt…

    编程技术 2025年2月27日
    200
  • Python中关于正则捕获操作的示例

    这篇文章主要介绍了python正则捕获操作,结合具体实例形式分析了python基于正则表达式的分组、捕获、替换等相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python正则捕获操作。分享给大家供大家参考,具体如下: 目的: 给表达式 …

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论