文档章节

Python学习-文件的输入、输出

 子易乐
发布于 2017/03/26 08:38
字数 1154
阅读 13
收藏 1

文件的输入输出

文件:数据持久化最简单的类型,也叫平面文件(flat file)。它仅仅是一个文件名下的字节流,把数据从一个文件读入内存,然后从内存写入文件。

读一个文件之前需要打开它,之后可以调用函数来读写数据,最后需要关闭文件。

fileobj = open(filename,mode)

        fileobj 是open()返回的文件对象;

        filename  是该文件的字符串名;

        mode 是指明文件类型和操作的字符串;

mode的第一个字母表明对其的操作:

r  表示读模式

w  表示写模式。如果文件不存在则新创建,如果存在则重写新内容

x   表示文件不存在的情况下新创建并写文件

a   表示如果文件存在,在文件末尾追加写内容

mode 的第二个字母是文件类型:

t   (或省略)代表文本类型

b    代表二进制文件

使用write()写文件

>>>poem="""There was a young lady named Bright,\
      whose speed was far faster than light;\
      She started one day \
      In a relative way,\
      And returned on the previous night."""

>>> len(poem)
167
>>> fout = open('relativity','wt')  #文件默认放在python的根目录下D:\python3
>>> fout.write(poem)
167
>>> fout.close()
>>> fout = open('relativity1','wt')
>>> print(poem,file=fout)    # 169  print()默认会在每个参数后添加空格,在每行结束处添加换行。它在文件relativity1中默认添加了一个换行。
>>> fout.close()

使用如下参数,保证print()与write()有同样的输出:

sep分隔符:默认是一个空格 ‘ ‘

end 结束字符:默认是一个换行符 ‘\n’

>>> fout = open('relativity2','wt')
>>> print(poem,file=fout,sep='',end='')  #167
>>> fout.close()
>>> 

如果源字符串非常大,可将数据分块,直到所有字符被写入:

>>> fout = open('relativity3','wt')
>>> size = len(poem)
>>> offset = 0
>>> chunk = 100
>>> while True:
        if offset > size:
            break
        fout.write(poem[offset:offset+chunk])
        offset+=chunk
100
67
>>> fout.close()

如果‘relativity’文件已经存在,可使用模式x 避免重写文件,还可加入一个异常处理:

>>> try:
      fout = open(‘relativity’,’xt’)
      fout.write(‘stomp stomp stomp’)
   except FileExistsError:
      print(‘relativity already exists!. That was a close one.’)

使用read()、readline()或者readlines()读文本文件

>>> fin = open('relativity','rt')
>>> poem = fin.read()
>>> fin.close()
>>> len(poem)
167
>>> 

可设置最大的读入字符数限制read()函数一次返回的大小,然后把每一块拼接成原来的字符串

>>> poem=''
>>> fin = open('relativity','rt')
>>> chunk = 100
>>> while True:
         fragment = fin.read(chunk)  #read会记住已读取得位置
         if not fragment:  # 读到文件结尾之后,再次调用read()会返回空字符串(‘’),if not fragment条件被判为False
                   break
         poem += fragment

>>> fin.close()
>>> len(poem)
167

也可使用readline()每次读入文件的一行,通过追加每一行拼接成原来的字符串poem:

>>> poem = ''
>>> fin = open('relativity','rt')
>>> while True:
         line = fin.readline() #对一个文本文件,即使空行也有1个字符长度(换行字符’\n’)
         if not line:  #当line非空时,返回True,当文件读取结束,readline()返回空字符串,返回为False
                   break
         poem += line
>>> fin.close()
>>> len(poem)
167

读取文本文件最简单的方式是使用一个迭代器(iterator),它会每次返回一行。

>>> poem = ''
>>> fin = open('relativity','rt')
>>> for line in fin:
         poem += line
>>> fin.close()
>>> len(poem)
167
>>> 

函数readlines()调用时每次读取一行,并返回单行字符串的列表。

使用write()写二进制文件

如果文件模式字符串中包含’b’,那么文件会以二进制模式打开,这种情况下,读写的是字节而不是字符串。

>>> bdata = bytes(range(0,256))
>>> len(bdata)
256
>>> fout = open('bfile','wb')
>>> fout.write(bdata)
256
>>> fout.close()

使用read()读二进制文件

>>> fin = open('bfile','rb')
>>> bdata = fin.read()
>>> len(bdata)
256
>>> fin.close()

使用with自动关闭文件

忘记关闭已打开的文件,函数结束时会被关掉。Python的上下文管理器(context manager)会清理一些资源,例如打开的文件,应该强制剩下的所有写操作完成后再关闭文件。它的形式为:with expression as variable:

>>> with open(‘relativity’,’wt’) as fout:
        fout.write(poem)

完成上下文管理器的代码后,文件会被自动关闭

使用seek()改变位置

函数tell()返回距离文件开始处的字节偏移量,函数seek()允许跳转到文件其他字节偏移量的位置。

>>> fin = open('bfile','rb')
>>> fin.tell()
0
>>> fin.seek(255)
255

用第二个参数调用函数seek():seek(offset,origin)

如果origin等于0(默认为0),从开头偏移offset个字节;

如果origin等于1,从当前位置处偏移offset个字节;

如果origin等于2,距离最后结尾处偏移offset个字节;

这些值也在标准os模块中被定义:

>>> os.SEEK_SET
0
>>> os.SEEK_CUR
1
>>> os.SEEK_END
2

© 著作权归作者所有

粉丝 0
博文 17
码字总数 18498
作品 0
西安
私信 提问
Python--windows下安装python

最近有爬虫方面的需求,就学习下python。windows安装python步骤如下 1.下载python python官网下载路径:https://www.python.org/downloads/release/python-372/ 由图可知,我下载的是3.7.2版...

求是科技
02/12
0
0
[SQL Server玩转Python] 二.T-SQL查询表格值及Python实现数据分析

版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/84029450 在开发项目过程中,更多的是通过Python访问SQL...

Eastmount
2018/11/13
0
0
AI 学习之路——轻松初探 Python 篇(二)

喜欢小之的文章的可以关注公众号「WeaponZhi」持续关注动态 这是「AI 学习之路」的第 2 篇,「Python 学习」的第 2 篇 我将分两篇讲解下 Python 的基础语法,这是第一篇。大家也可以在很多地...

WeaponZhi
2018/10/29
0
0
centos 6.4x64 django开发环境搭建(升级python2.6.6为2.7.3)

最近学习python语言,学到django的时候,准备搭建一个django开发环境,几经周折,最终配置成功,现把配置过程整理出来,供大家学习交流: 服务器环境: CentOS release 6.4 (Final) x64 1,下...

苦咖啡sa
2015/04/09
0
0
python标准库00 学习准备

Python标准库----走马观花 python有一套很有用的标准库。标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以让编程事半功倍....

肖邦0526
2015/12/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
解决多线程并行加载缓存问题(利用guava实现)

依赖 com.google.guava:guava:20.0 import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import j......

暗中观察
昨天
3
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
2
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部