Python内置函数open,用来打开在磁盘上的文件,并返回一个文件对象,所有对该文件的后续操作都是通过这个"句柄"来进行的。

一、文件操作的三个步骤:

  1. 打开文件;
  2. 操作文件;
  3. 关闭文件。

二、打开文件:

1 文件句柄 = open('文件路径', '模式')

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的基本模式:

  • r ,只读模式【默认】
  • w,只写模式【不可读;不存在则创建;存在则清空内容;】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容;】
1 f = open('db', 'r') # 只读,默认
2 f = open('db', 'w') # 只写,先清空原文件
3 f = open('db', 'x') # 文件存在,报错;不存在,创建并只写;python3中才出现的。
4 f = open('db', 'a') # 追加

1 f = open("db","r",encoding="utf-8")  # 当文件打开出现乱码时,一般需要关注编码方式
2 data = f.read()                     # 默认读出为字符串str类型
3 print(data,type(data))
4
5 #输出
6 admin|123
7 222|222 <class 'str'>

1 f = open("db","a",encoding="utf-8")
2 f.write("李杰")
3 f.close()

 1 f = open('db','rb')    #b表示以字节方式操作,二进制方式读取文件,不用设置编码类型。
 2 data = f.read()
 3 print(data,type(data))
 4
 5 # 输出为字节类型
 6 b'admin|123\r\n222|222\xe6\x9d\x8e\xe6\x9d\xb0' <class 'bytes'>
 7
 8 f = open("db", 'ab')    # 以字节方式追加
 9 f.write(bytes("王五", encoding="utf-8"))   # 需要字节类型写入
10 f.close()
11
12 #文件内容
13 admin|123
14 222|222李杰王五
15
16 f = open("db", 'ab')   
17 f.write("王五")   # 错误示例
18 f.close()
19
20 #输出
21 略
22 TypeError: a bytes-like object is required, not 'str'

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】,该模式为最常用的模式。
  • w+,写读【可读,可写】,先清除文件内容,然后可以写读操作,不常用。
  • x+ ,写读【可读,可写】,与w+类似,不常用。
  • a+, 写读【可读,可写】,不管指针指向何处,最终都是在文件末尾追加,不常用。

"b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型

 1 f = open("db","r+",encoding="utf-8")   #读写模式,该模式为最常用的模式
 2 data = f.read()          # 指针移到最后
 3 # print(f.tell())
 4 f.write("大刀")            #在指针后进行数据写入,覆盖模式
 5 f.close()
 6
 7 #文件内容
 8 admin|123
 9 222|222李杰王五大刀
10
11
12 f = open("db","r+",encoding="utf-8")
13 # 如果打开模式无 b,则read,按照字符读取;有b,则read按照字节读取。
14 data = f.read(1)
15 # tell当前指针所在的位置(字节)
16 print(f.tell())
17 # 调整当前指针的位置(字节)
18 f.seek(1)
19 # 当前指针位置开始向后覆盖
20 f.write("7777")
21 f.close()
22
23 #程序输出
24 3              # f.read(1)按字符读取,第一个字符为“李”,因此当前指针在3的位置
25
26 #文件内容
27 �7777min|123        # f.seek(1)后,指针位置调整为1,使得“李”这个字符的三个字节被分割,最终导致乱码
28 222|222李杰王五

三、操作文件:

# read() # 无参数,读全部;有参数,
#                                               open方式有b,按字节
#                                              open方式无b,按字符# tell() 获取当前指针位置(字节)
# seek(1) 指针跳转到指定位置(字节)
# write() 写数据,open方式有b,字节方式写入; open方式无b,字符方式写入。
# close
# flush   强刷
# truncate 截断,指针为后的清空
# readline 仅读取一行

关于flush:

一般的文件流操作都包含缓冲机制,write方法并不直接将数据写入文件,而是先写入内存中特定的缓冲区。

flush方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区。

正常情况下缓冲区满时,操作系统会自动将缓冲数据写入到文件中。

至于close方法,原理是内部先调用flush方法来刷新缓冲区,再执行关闭操作,这样即使缓冲区数据未满也能保证数据的完整性。

如果进程意外退出或正常退出时而未执行文件的close方法,缓冲区中的内容将会丢失。

1 # for循环文件对象 f = open(xxx)
2 for line in f:
3     print(line)

四、关闭文件:

1 # 方法一:
2 f.close()
3
4 # 方法二:
5 with open('xb') as f:
6     pass

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。

在Python 2.7 及以后,with又支持同时对多个文件的上下文进行管理,即:

1 with open('log1') as obj1, open('log2') as obj2:
2     pass

五:额外

实现:从文件db1中获取每行信息,并逐行写入到文件db2中,第10行之后自动退出。

1 with open("db1","r",encoding="utf-8") as r,open("db2","w",encoding="utf-8") as w:
2     times = 0
3     for line in r:
4         times += 1
5         if times <= 10:
6             w.write(line)
7         else:
8             break

实现:对每行中包含特定字符串的,进行替换。

 1 with open("db1","r",encoding="utf-8") as r,open("db2","w",encoding="utf-8") as w:
 2     for line in r:
 3         new_line = line.replace("111","vxvx")
 4         w.write(new_line)
 5
 6 #db1文件
 7 111111
 8 22222
 9 33333
10
11 #db2文件
12 vxvxvxvx
13 22222
14 33333

http://www.cnblogs.com/wupeiqi/articles/4950799.html

转载于:https://www.cnblogs.com/chhphjcpy/p/6083732.html

020-python函数和常用模块-文件操作相关推荐

  1. Python os模块文件操作(二)

    Python os模块文件操作(二) os模块对文件夹和文件的操作很多.可以先看: https://blog.csdn.net/weixin_43790276/article/details/9867 ...

  2. Python os模块文件操作(一)

    Python os模块文件操作(一) 一.文件描述符 在使用代码对文件进行操作时,为了指定操作的文件,避免不了要使用文件描述符,所以我们先介绍什么是文件描述符. 操作系统为了高效管理已经被打开的文件, ...

  3. php文件有哪几种,PHP常用的文件操作函数有哪些

    PHP常用的文件操作函数有哪些 本文主要总结的PHP文件操作函数.当然,这只是部分,还有很多,我没有列出来.欢饮阅读参考! 一 .解析路径: 1 获得文件名: basename(); 给出一个包含有指 ...

  4. python复制文件shutil_Python常用模块——文件复制模块shutil

    Python常用模块--文件复制模块shutil shutil模块 高级的文件.文件夹.压缩包处理模块 shutil.copyfileobj(fsrc, fdst) 将文件内容拷贝到另一个文件中 im ...

  5. Python中的常用模块

    1.sys模块(内置模块) 在sys模块中定义了一些函数和变量,用来设置和获取系统的信息. # Python中的常用模块:sys模块 import sys sys.path.append('./tes ...

  6. C#常用的文件操作 (转)

    C#常用的文件操作 C#常用的文件操作(网上收集) C#写入/读出文本文件,包括创建文件,追加文件,修改文件,等等操作,个人觉得很适用,所以收藏了,和大家分享 public void Page_Loa ...

  7. python开发_xml.etree.ElementTree_XML文件操作

    python开发_xml.etree.ElementTree_XML文件操作_该模块在操作XML数据是存在安全隐患_慎用 xml.etree.ElementTree模块实现了一个简单而有效的用户解析和 ...

  8. Python包下载常用whl文件汇总:最全的Python whl集合

    Python包下载常用whl文件汇总:最全的Python whl集合 对于Python开发者来说,我们经常需要下载各种第三方库或包,而这些包往往需要我们手动下载并安装.在Python中,我们通常使用p ...

  9. python 常用模块函数_python函数和常用模块(三),Day5

    递归 反射 os模块 sys模块 hashlib加密模块 正则表达式 反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数 ...

最新文章

  1. 如何自定义MFC的窗口类名
  2. 爬虫入门二(urllib,urllib2)
  3. Kudu 使用注意点
  4. svn 中的url路径修改和 清除 svn用户名和密码
  5. LIBAVCODEC_VERSION_INT是哪里定义的?
  6. 什么是0day漏洞,1day漏洞和nday漏洞
  7. 原始LBP算法 代码
  8. STM32接入机智云--实现数据上传和命令下发
  9. 探秘广场舞:中老年市场绝佳切口?
  10. springboot基于协同过滤算法的书籍推荐毕业设计源码101555
  11. datedif函数mysql_DateDiff函数
  12. Scala 继承和特质
  13. 树莓派Pico-Raspberry Pi Pico简介
  14. python卡尔曼滤波室内定位_基于Unscented卡尔曼滤波的室内定位
  15. 在vc2008中用_crtBreakAlloc调试内存泄漏
  16. 普歌-飞灵团队-nuxt中jQuery报e.indexOf is not a function错误
  17. ol+天地图+geoserver_教程:使用GeoServer发布离线地图服务(WMS)
  18. 微信小程序例子——修改小程序的标题
  19. win10找不到wifi网络_当WiFi和4G网络齐飞,你的手机恐怕撑不到回家充电了…
  20. Docker 容器仓库之搭建私有仓库、hub仓库

热门文章

  1. perl语言得到的txt文档只有表头_编程语言排行榜第一Python,为何频繁遭受开发者的嫌弃!...
  2. mysql授权dml_Mysql DML DCL DDL
  3. mysql error 28,MySQL错误:Got error 28 from storage engine
  4. Win10的 IntelliJ idea中log4j2控制台中文乱码的几种处理方法
  5. NYOJ324 - 猴子吃桃问题
  6. java 声明是否合法,一个合法的Java源程序中定义了4个类,其中属性为public的类可能有( )个...
  7. Python入门--函数传递过程中实参的变化
  8. lua游戏脚本实例源码_Redis Lua脚本中学教程(上)
  9. [leetcode]174. 地下城游戏
  10. [leetcode] 554. 砖墙