1. 文件操作介绍

说到操作文件我们肯定会想到流,文件的操作都是通过流来操作的。在python中文件的操作非常简单,并不像Java等其他语言一样有各种各样的流操作,我们直接使用open函数即可打开一个文件,然后进行各种操作,但是根据打开的不同的方式所能够执行的操作也不一样,打开文件的方式有:r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 等等。

下面我们先看一个读取的文件操作:

In [2]: f = open(file='a.txt', mode='r', encoding='utf-8')

In [3]: f.read()
Out[3]: '每天坚持一点,\n每天努力一点,\n每天多思考一点,\n慢慢你会发现,\n你的进步越来越大\n' In [4]:

使用open函数打开文件,并且返回一个文件对象,open函数常见的几个参数file(要操作的文件名),mode(以什么模式打开)和encoding(指定一种编码来读取文件),根据不同的mode模式,返回的文件会有各种不同的操作。下面我们来看一下文件的几种操作。

2. 文件操作的几种方式

(1)只读操作

只读操作只需指定mode为r即可:

In [5]: f = open(file='a.txt', mode='r', encoding='utf-8')

In [6]: f.read()
Out[6]: '每天坚持一点,\n每天努力一点,\n每天多思考一点,\n慢慢你会发现,\n你的进步越来越大\n' In [7]: f.readable() # 判断文件是否可读
Out[7]: True In [8]: f.writable() # 判断文件是否可写
Out[8]: False # 此处是以只读模式打开的文件,所以返回False不可写 In [9]: f1 = open(file='单分支结构.eddx', mode='rb') # 使用‘rb’可以打开存储为二进制的数据,图片、视频等 In [10]: f1.read(20)
Out[10]: b'PK\x03\x04\x14\x00\x08\x00\x08\x00mN\xe3H\xa9\x95\xb3\x9eW\x01'

(2)只写操作

mode='w'


In [13]: f = open(file='a.txt', mode='w', encoding='utf-8') In [14]: f.read() # 此时尝试读取文件会报错
---------------------------------------------------------------------------
UnsupportedOperation Traceback (most recent call last)
<ipython-input-14-571e9fb02258> in <module>
----> 1 f.read() UnsupportedOperation: not readable In [15]: f.write('葫芦娃')
Out[15]: 3 In [16]: f.close() In [17]: !cat a.txt # 此时查看文件之前那的内容已经被覆盖了
葫芦娃
In [18]:

使用mode='w'操作文件时首先会在打开文件时先清空文件,然后再根据操作把内容写入文件,只读模式有以下特点:

  • 当文件不存在时,会自动创建文件,然后打开文件进行操作
  • 打开文件时会先清空文件的内容,然后再从头开始写入
  • 文件以只写模式打开,不能够读取

(3)追加操作

mode='a'

In [18]: f = open(file='a.txt', mode='a', encoding='utf-8')

In [19]: f.write('每天坚持一点,\n每天努力一点,\n每天多思考一点,\n慢慢你会发现,\n你的进步越来越大\n')
Out[19]: 42 In [20]: f.close() In [21]: In [21]: !cat a.txt
葫芦娃每天坚持一点,
每天努力一点,
每天多思考一点,
慢慢你会发现,
你的进步越来越大 In [22]:

追加模式的操作:

  • 打开文件时如果文件不存时会先创建文件
  • 往文件中写入内容时都是在文件末尾写入,不论光标在哪
  • 打开的文件只能写入,不能读取

(4)r+模式

r+模式是加强的读操作,即可以读写:

In [22]: f = open(file='a.txt', mode='r+', encoding='utf-8')

In [23]: f.readable()
Out[23]: True In [24]: f.writable()
Out[24]: True In [25]: f.read()
Out[25]: '葫芦娃每天坚持一点,\n每天努力一点,\n每天多思考一点,\n慢慢你会发现,\n你的进步越来越大\n' In [26]: f.write('\n哈哈哈哈哈哈哈')
Out[26]: 8 In [27]: f.close() In [28]: !cat a.txt # 查看写入的文件并没有异常
葫芦娃每天坚持一点,
每天努力一点,
每天多思考一点,
慢慢你会发现,
你的进步越来越大 哈哈哈哈哈哈哈
In [29]: f = open(file='a.txt', mode='r+', encoding='utf-8') In [30]: f.seek(0, 2) # seek可以调整光标位置
Out[30]: 153 In [31]: f.write('你的进步越来越大')
Out[31]: 8 In [32]: f.read() # 先写后读会读出空字符
Out[32]: '' In [33]:

总结:增强型的读操作对文件可读可写,但是顺序必须是先读取在往里面写入,如果先读再写入再读取的时候可能会读取到空字符串

r+模式深坑请注意: 在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显⽰的是多少. 再写入或者操作⽂件的时候都是在结尾进⾏的操作

(5)w+和a+模式

w+模式和a+模式在实际使用场景较少,这边简单介绍一下:

  • w+:增强型的w模式,可以写和读操作,但是也跟r+一样,如果先读操作再写操作的话会有坑出现,并且每次在打开文件是会先清空文件,因此使用场景较少
  • a+:增强型的a模式,也可以进行读写操作,但是写入时只能往文件的末尾写入,无论光标怎么移动,都只能在文件末尾写入

3. 文件的操作的方法

(1)文件的读取和写入

文件的写入:主要是write方法以及writelines方法

  • write方法:直接写入字符串即可,上面的例子中也有用到
  • writelines方法:传递的参数必须时可迭代的(如列表和元组等)

文件的读取

  • read方法:read方法接收一个int型的参数,表示一次读取几个字符(seek的单位是字节),不提供默认是读取文件所有内容
  • readline方法:读取文件一行,文件很大时这个方法很使用,不会一次读取整个文件
  • readlines方法:读取出整个文件,以每一行分割存放到一个列表里并返回这个列表
In [34]: f = open(file='a.txt', mode='r', encoding='utf-8')
# 葫芦娃每天坚持一点,
# 每天努力一点,
# 每天多思考一点,
# 慢慢你会发现,
# 你的进步越来越大 # 哈哈哈哈哈哈哈你的进步越来越大
In [35]: f.read(10) # 这里时一次读取10个字符
Out[35]: '葫芦娃每天坚持一点,' In [36]: f.readline()
Out[36]: '\n' In [37]: f.readline() # 每次读取一行
Out[37]: '每天努力一点,\n' In [38]: f.readlines() # 返回的是一个列表
Out[38]: ['每天多思考一点,\n', '慢慢你会发现,\n', '你的进步越来越大\n', '\n', '哈哈哈哈哈哈哈你的进步越来越大'] In [39]:

readline(文件句柄)和readlines的区别

  • 文件句柄是一个可迭代对象,在循环遍历时每遍历一次取一行,不会在读取文件时一次性全部读出来
  • readlines返回的结果是一个列表,会一次性把整个文件的内容读取出来并返回一个列表,在处理大文件时会非常消耗资源

也可以使用循环去遍历文件句柄,输出文件中的内容:

In [39]: f.seek(0)
Out[39]: 0 In [40]: for line in f:
...: print(line.strip())
葫芦娃每天坚持一点,
每天努力一点,
每天多思考一点,
慢慢你会发现,
你的进步越来越大 哈哈哈哈哈哈哈你的进步越来越大 In [41]:

(2)文件操作的其他方法

  • close:关闭文件
  • readable:判断文件是否可读
  • seek:移动光标,接收两个数据第一个参数表示偏移到哪个位置(移动的单位是byte. 所以如果是UTF-8的中⽂部分要是3的倍数),第二个参数表示从那个位置开始偏移(0,代表开头,1代表当前位置,2代表结尾)
  • seekable:判断当前文件的光标是否可移动
  • tell:返回当前光标所在的位置
  • truncate:截断数据(谨慎操作),默认截断光标后所有字符
  • writable:判断文件是否可写

(3)打开文件的另一种方式

在打开一个文件后,要记得在文件使用结束狗使用close方法关闭文件句柄,但有时在中间进行大量的操作后可能会忘了关闭,下面介绍的这种方法可以不用自己手动关闭文件了,他会在您操作解说后(代码块的语句执行完毕)自动关闭文件句柄,这种方法就是使用context上下文管理,使用with语句实现:

In [43]: with open('a.txt', mode='r', encoding='utf-8') as f:   # 使用with管理上下文,最后退出时会自己执行close动作
...: for line in f:
...: print(line.strip())
葫芦娃每天坚持一点,
每天努力一点,
每天多思考一点,
慢慢你会发现,
你的进步越来越大 哈哈哈哈哈哈哈你的进步越来越大 In [44]:

python学习笔记:第8天 文件操作的更多相关文章

  1. python学习笔记(二)文件操作和集合

    集合: 集合也是一种数据类型,一个类似列表东西,它的特点是无序的,不重复的,也就是说集合中是没有重复的数据 集合的作用: 1.它可以把一个列表中重复的数据去掉,而不需要你再写判断 2.可以做关系测试, ...

  2. python学习笔记——(三)文件操作

    ·集合操作及其相应的操作符表示集合中没有插入,只有添加,因为毕竟无序 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Vergil Zhan ...

  3. python学习笔记(11)文件操作

    一.读文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...

  4. python学习笔记(八)——文件操作

    在 windows 系统下,我们通过 路径+文件名+扩展名的方式唯一标识一个文件,而在 Linux 系统下通过 路径+文件名唯一标识一个文件. 文件分类:文件主要可以分为文本文件和二进制文件,常见的如 ...

  5. python学习笔记(五)文件操作和集合

    文件基本操作: 现有文件file.txt f=open('file.txt','r')#以只读方式打开一个文件,获取文件的句柄,如果是读的话,r可以不写,默认就是只读:文件不存在时,会报错 first ...

  6. Python学习笔记 -- 第六章 文件操作

    I/O编程 在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这 ...

  7. python学习笔记(三)— 文件操作

    对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件a.txt: 登鹳雀楼 唐代:王之涣 白日依山尽,黄河入海流. 一.文件基 ...

  8. Python学习笔记3:简单文件操作

    # -*- coding: cp936 -*- # 1 打开文件 # open(fileName, mode) # 參数:fileName文件名称 # mode打开方式 # w     以写方式打开. ...

  9. python学习笔记(五)- 文件操作

    1.读文件f = open('word.txt',encoding='utf8')  #默认打开当前目录下的文件,打开其它目录用绝对路径#f = open('word.txt',encoding='u ...

  10. Python 学习笔记之 Numpy 库——文件操作

    1. 读写 txt 文件 a = list(range(0, 100)) a = np.array(a) # a.dtype = np.int64 np.savetxt("filename. ...

随机推荐

  1. 万能的JDBC工具类。通过反射机制直接简单处理数据库操作

    package com.YY.util; import java.io.IOException; import java.io.InputStream; import java.sql.Connect ...

  2. C# winfrom Datagridview表头样式和选中样式

    Griscolor是表格线的颜色 表头的样式修改如下图: 选中某一行的样色设置

  3. 存储过程存储过程需要用两个'',先where再Group,再Order by

    存储过程需要用两个'',先where再Group,再Order by  未完,待续

  4. linux 下通过过 hbase 的Java api 操作hbase

    hbase版本:0.98.5 hadoop版本:1.2.1 使用自带的zk 本文的内容是在集群中创建java项目调用api来操作hbase,主要涉及对hbase的创建表格,删除表格,插入数据,删除数据 ...

  5. Python初学者第二十一天 函数(4)-内置函数

    21day 内置函数: 1.abs()绝对值函数 2.dict()创建一个字典 3.help()获取帮助信息 4.min()从一个列表中取出最小的数 5.max()从一个列表中取出最大值 6.bool ...

  6. 3D旋转相册的实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. August 11th 2017 Week 32nd Friday

    I can't give you the world, but I can give you my world. 我不能给你全世界,但是我的世界我可以全部给你. Maybe I can't give ...

  8. January 08 2017 Week 2nd Sunday

    Believe not all that you see nor half what you hear. 眼见的不能全信,耳闻的也不能半信. What you hear, what you see, ...

  9. 2、Python文件操作工具 xlrd 工具

    #打开excel文档workbook = xlrd.open_workbook('..\cye.xls',encoding_override='utf-8') #获取sheet页信息sheet = w ...

  10. POJ1039 Pipe

    嘟嘟嘟 大致题意:按顺序给出\(n\)个拐点表示一个管道,注意这些点是管道的上端点,下端点是对应的\((x_i, y_i - 1)\).从管道口射进一束光,问能达到最远的位置的横坐标.若穿过管道,输出 ...