资讯专栏INFORMATION COLUMN

python学习笔记 - 文件读写

马永翠 / 376人阅读

摘要:文件打开的方式有多种。读取模式写入模式。若文件不存在,则会创建文件。但是文件必须已经存在。模式文件的读写是文本模式,这就意味着会把转换成平台相关的换行符。

现代的操作系统其实都不允许程序直接读写系统中的文件,而是程序通过请求系统打开一个文件对象,然后再对文件对象进行读写。

import logging

try:
    f = open("getAttar.py", "r")
    content = f.read()
    print content
except IOError, e:
    logging.error(e)
finally:
    if f:
        f.close()

python在申请打开文件对象的时候,可能会存在文件不存在的情况,则会抛出IOError需要我们捕获处理。
文件对象一旦打开,就需要我们去关闭它。否则其会占用系统资源。
文件打开的方式有多种。

open(name[, mode[, buffering]])
mode:

"r": 读取模式
"w": 写入模式。如果文件已经存在,则会先清空。若文件不存在,则会创建文件。
"a": append,添加。在unix系统,在,a模式意味着将内容写入到文件末端而不管当前的指针在哪里。
"r+": 兼具读写功能。但是文件必须已经存在。而且只会覆盖写入的区域,而保留未被覆盖的区域。例如文件中有“111111”六个1,用该模式写入“000”后就变成“000111”了。
"w+":兼具读写功能。但是会清空文件。

模式文件的读写是文本模式,这就意味着会把 转换成平台相关的换行符。
如果需要操作二进制文件,则需要添加模式"b"。

buffering参数

0: 不缓存
1: 缓存一行
其他正整数:代表相应的bytes被缓存了。
负整数:系统默认

with open(filename) as f

我们可以使用with ... as ...这种语句替代try...finally..
with语句用于对资源进行控制的场合。
例如:

with open("world.txt", "r") as f:
    for line in f:
        print line

需要了解更多,可以阅读:
http://www.ibm.com/developerw...

file-like object

open()打开的一个文件后返回是file-like object.除了文件file以外,还可以是内存中的字节流,网络流,自定义流等等。
StringIO创建的就是file-like object,常用做临时缓冲。

二进制文件

Python中默认读取文件是以text模式读取。读取图片、视频、音频等二进制文件的时候,可以添加模式b代表以二进制模式读取。

字符编码

assci码给英语世界常用的字符和英文字母变了个号。但是未考虑其他国家的符号。
unicode 给世界上几乎所有的符号都编了个号码。
utf-8是unicode的一种实现形式。
在python中,我们可以将读取的字符解码(decode)成unicode,然后将unicode编码成制定的编码形式。
例如

f = open("demo.txt", "r")
print f.read().decode("gbk")
f.close()

上述代码中将读取到的文本按gbk编码方式解码成unicode。
但是总是这么手工解码比较麻烦,python为我们提供了codecs模块。例如:

import codecs

with codecs.open("world.txt", "rb", encoding="gbk") as f:
    for line in f:
        print line

除了上述按特定编码格式解码文件,然后按unicode格式存储在内存中。
我们也可以将内存中的unicode以特定格式写入文本。

# coding=utf-8
import codecs

with codecs.open("world.txt", "rb", encoding="utf-8") as rf, 
        codecs.open("world2.txt", "wb", encoding="gbk") as wf:
    wf.write(rf.read())

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38343.html

相关文章

  • Python 3 学习笔记之——键盘输入和读写文件

    摘要:键盘输入提供了内置函数从标准输入读入一行文本,默认的标准输入是键盘。可以接收一个表达式作为输入,并将运算结果返回。将返回该文件中包含的所有行。将写入到文件中然后返回写入的字符数。当处理一个文件对象时使用关键字是非常好的方式。 1. 键盘输入 Python提供了 input() 内置函数从标准输入读入一行文本,默认的标准输入是键盘。input 可以接收一个 Python 表达式作为输入,...

    xavier 评论0 收藏0
  • python学习笔记 - StringIO以及BytesIO

    摘要:可以传入一个字符初始化。只能处理字符串类型的数据,可以用于处理二进制类型的数据。在搜索文档的时候,发现在下也有一个,而且两者非常类似。 之前我们所说的都是读写真正的文件。其实我们也可以在内存中虚拟一个文件进行读写。Python给咱们提供的官方module有io.StringIO和io.BytesIO. io.StringIO String IO用于在内存在读写字符串。StringIO可...

    CastlePeaK 评论0 收藏0
  • SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧

    摘要:学习笔记七数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。学习笔记十一尺度不变特征变换,简称是图像局部特征提取的现代方法基于区域图像块的分析。本文的目的是简明扼要地说明的编码机制,并给出一些建议。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 开始之前,我们先来看这样一个提问: pyth...

    lifesimple 评论0 收藏0
  • Python学习之路9-文件和异常

    摘要:本章主要是学习的文件操作,主要是从文件中读取数据以及将数据存储到文件中,还有错误处理,异常类,模块等。函数返回一个文件对象,用于接收该对象。异常中使用被称为异常的特殊对象来管理程序执行期间发生的错误。 《Python编程:从入门到实践》笔记。本章主要是学习Python的文件操作,主要是从文件中读取数据以及将数据存储到文件中,还有错误处理,异常类,json模块等。 1. 从文件中读数据 ...

    chenatu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<