文件的输入输出

文件:数据持久化最简单的类型,也叫平面文件(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:breakfout.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条件被判为Falsebreakpoem += 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()返回空字符串,返回为Falsebreakpoem += 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

python学习-文件的输入、输出相关推荐

  1. 独家|OpenCV1.8 使用XML和YAML文件实现文件的输入/输出

    翻译:陈之炎 校对:李海明本文约2400字,建议阅读5分钟本文为大家介绍了OpenCV使用XML和YAML文件实现的输入输出. 目标 本小节将回答以下问题: 如何使用YAML或XML文件打印和读取文本 ...

  2. python安装文件乱码_python输出到文件乱码如何解决

    python代码文件的编码 py文件默认是ASCII编码,中文在显示时会做一个ASCII到系统默认编码的转换,这时就会出错:SyntaxError: Non-ASCII character.需要在代码 ...

  3. 文件输出 java_用Java读写文件(输入/输出)-教程

    一.文件的Java I/O(输入/输出) 1.1.概述 在现代Java应用程序中,通常使用Java.nio.fileAPI来读写文件. Java将把所有输入作为字节流读取.input stream类是 ...

  4. linux c文件操作,Linux C 文件的输入/输出操作

    10.1 文件I/O操作概述 在Linux系统中,文件I/O操作可以分为两类,一类是基于文件描述符的I/O操作,另一类是基于数据流的I/O操作. 10.1.1 文件描述符简介 在文件操作一章中,也经常 ...

  5. 文件的输入/输出操作

    10.1 文件I/O操作概述 在Linux系统中,文件I/O操作可以分为两类,一类是基于文件描述符的I/O操作,另一类是基于数据流的I/O操作. 10.1.1 文件描述符简介 在文件操作一章中,也经常 ...

  6. C基础学习之C 输入 输出

    目录 标准文件 getchar() & putchar() 函数 gets() & puts() 函数 scanf() 和 printf() 函数 当我们提到输入时,这意味着要向程序填 ...

  7. python学习总结7 - 输入与输出【格式化字符串及读写文件】

    文章目录 输入与输出 1.更复杂的输出格式 1.1 格式化字符串字面值(3.6版本加入) 1.2 字符串的format方法 1.3 手动格式化字符串 1.4 旧式字符串格式化方法 2.读写文件 2.1 ...

  8. Python学习笔记:输入和输出

    本文来自:入门指南 开胃菜参考:开胃菜 使用Python解释器:使用Python解释器 本文对Python的简介:Python简介 Python流程介绍:深入Python流程 Python数据结构:P ...

  9. python学习笔记 --- print (输出到文件 file)

    print 输出直接到文件里 主要是python版本问题,语法不一样,这里记录一下. python 3.x #!/usr/bin/env python3 #coding:utf-8 K = 10 f ...

最新文章

  1. 热门云服务超87GB电子邮箱和密码泄露,黑客已验证大部分数据
  2. 清华大学朱军:深度生成模型、算法和概率编程库(附视频+PPT)
  3. 老男孩教育参观云计算公司
  4. 如何降低SQL语句复杂度
  5. 第五十四期:Libra盟友纷纷“跳船”,联盟链还有戏吗?
  6. ubuntu清空回收站
  7. gc:C语言的垃圾回收库-中文
  8. WHATWG API——url.parse()的替代方案
  9. x5内核有什么优点_关于接入腾讯X5内核的一些坑(不断更新)
  10. R语言 需要安装的包
  11. Silverlight 4 帮助文件例子的连接
  12. Java图片上查找图片算法
  13. 树莓派 之 USB摄像头安装和使用
  14. 循环中使用switch在执行条件后使用break和continue的区别
  15. Power BI中计算同比、环比
  16. 敬畏传奇——直面第一台可编程电子计算机:Colossus
  17. Dashboard的安装及其配置
  18. onnx 模型推理示例-Python 实现 |【onnx 模型推理】
  19. Excel解析与数据生成(撑持JXL,POI)
  20. 立创EDA学习2-绘制原理图(初级)

热门文章

  1. CentOS下载Nginx
  2. PreTranslateMessage和TranslateMessage区别(转)
  3. IMP-00038: Could not convert to environment character set's handle
  4. 错误1053服务没有及时_Windows7 错误1053:服务没有及时响应启动或控制请求解决办法...
  5. echarts的柱状图立体效果解决方案 echarts.graphic.LinearGradient
  6. Revit2020 SDK安装后无AddIn Manager文件(已解决)
  7. VNCTF2022_Misc_复现
  8. 论文阅读:Making Smart Contracts Smarter
  9. 还在手写代码?用了这个工具,不用一行代码也能做出网站
  10. (第八章) UI--PS 基础 滤镜