1 .文件基本操作

  1. obj = open('路径',mode='模式',encoding='编码') # 打开文件
  2. obj.write() # 写入内容
  3. obj.read() # 读取文件
  4. obj.close() # 关闭文件

2. 打开模式

  • r / w / a 【只读只写字符串】
  • r+ / w+ / a+ 【可读可写字符串】
  • rb / wb / ab 【只读只写二进制】
  • r+b / w+b / a+b 【可读可写二进制】

2.1 模式:r / w / a

  • 1.读取 r

    1. # 打开文件
    2. file_object = open('log.txt',mode = 'r',encoding = 'utf-8')
    3. '# log.txt' 文件路径 encoding = 'utf-8' 存储时的方式,用什么方式存储就用什么方式读取读取内容
    4. # 读取文件
    5. content= file_object.read() # 读取文件的内容到内存(全部)
    6. print(content)
    7. # 关闭文件
    8. file_object.close()

    r 只能读不能写,文件不存在则报错。

  • 2.写入 w

    1. # 打开文件
    2. file_object = open('log.txt',mode = 'w',encoding = 'utf-8')
    3. # 写入内容
    4. file_object.write('李忠伟')
    5. # 关闭文件
    6. file_objet.close()

    w 只能写不能读

    w 要慎重使用,使用 w 打开文件时是先清空文件再写入内容的。一般用于新建文件(文件不存在则新建)。

  • 3.追加 a

    1. # 打开文件
    2. file_object = open('log.txt',mode = 'a',encoding = 'utf-8')
    3. # 写入内容
    4. file_object.write('你好')
    5. # 关闭文件
    6. file_objet.close()

    a 只追加不能读,只在文件内容的最后面追加。

    文件不存在则新建

2.2 模式:r+ / w+ / a+

  • 1.可读可写 r+

    1. # 打开文件
    2. file_object = open('log.txt',mode = 'r+',encoding = 'utf-8')
    3. file_object.seek(3) # 把光标移到文件开头第3个字节的位置
    4. file_object.write('999') # 在第3个字节的位置写入999
    5. # 读取内容
    6. content= file_object.read()
    7. print(content)
    8. file_object.write('666') # 在前面写入的999的位置处写入666
    9. # 关闭文件
    10. file_object.close()

    写入时:根据光标的位置,从当前光标位置开始进行写入操作(可能会将光标后其他的文字覆盖)

    总结:

    • 读:默认从0的光标开始读,也可以通过seek调整光标的位置
    • 写:从光标所在的位置开始写,也可以通过seek调整光标的位置。
  • 2.可读可写 w+

    1. file_object = open('log.txt',mode = 'w+',encoding = 'utf-8')
    2. data = file_object.read()
    3. print(data) # 文件是空的
    4. file_object.write('alex') # a
    5. file_object.seek(0) # b
    6. file_object.read() # c
    7. '# a+b+c这三步:a 写完后光标在最后面,想要进行 c 读取,需要在 c 前加入 b 将光标跳到0字节位置处(即文件开头位置)
    8. print(data)
    9. file_object.close()

    写入时会将文件清空,读取时需要调整光标的位置开始读取。

    总结:

    • 读:默认光标永远在写入的最后或0(打开清空了还没写入时在0的位置),也可以通过seek调整光标的位置。
    • 写:先清空
  • 3.可读可写 a+

    1. file_object = open('log.txt',mode = 'a+',encoding = 'utf-8')
    2. file_object.seek(0)
    3. data = file_object.read()
    4. print(data)
    5. file_object.seek(0)
    6. file_object.write('666')
    7. file_object.close()

    总结:

    • 读:默认光标在最后,也可以通过seek调整光标的位置,然后再去读取。
    • 写:永远写到最后

2.3 模式:rb / wb / ab

  • 1.rb 二进制读取

    rb 只能二进制读取不能二进制写,文件不存在则报错。

  • 2.wb 二进制写入

    wb 只能二进制写入不能二进制读取

    wb 要慎重使用,使用 wb 打开文件时是先清空文件再写入内容的。一般用于新建文件(文件不存在则新建)。

  • 3.ab 二进制追加

    ab 只追加不能读,只在文件内容的最后面追加。

    文件不存在则新建

2.4 模式:r+b / w+b / a+b

  • 1.可读可写二进制 r+b

    写入时:根据光标的位置,从当前光标位置开始进行写入操作(可能会将光标后其他的文字覆盖)

    总结:

    • 读:默认从0的光标开始读,也可以通过seek调整光标的位置
    • 写:从光标所在的位置开始写,也可以通过seek调整光标的位置。
  • 2.可读可写二进制 w+b

    写入时会将文件清空,读取时需要调整光标的位置开始读取。

    总结:

    • 读:默认光标永远在写入的最后或0(打开清空了还没写入时在0的位置),也可以通过seek调整光标的位置。
    • 写:先清空
  • 3.可读可写二进制 a+b

    总结:

    • 读:默认光标在最后,也可以通过seek调整光标的位置,然后再去读取。
    • 写:永远写到最后

3. 操作

3.1 读操作

  • read() , 全部读到内存

  • read(1)

    • 1表示一个字符

      1. obj = open('a.txt',mode='r',encoding='utf-8')
      2. data = obj.read(1) # 1个字符
      3. obj.close()
      4. print(data)
    • 1表示一个字节

      1. obj = open('a.txt',mode='rb')
      2. data = obj.read(3) # 1个字节
      3. obj.close()
  • 读取小文件:

    1. file_object = open('log.txt',mode = 'r',encoding = 'utf-8')
    2. data = file_object.read() # 读取文件的所有内容到内存
    3. data = file_object.read(2) # 从当前光标所在的位置向后读取文件两个字符
    4. data_list = file_object.readlines() # 读取文件的所有内容到内存,并按照每一行进行分割到列表中。 (每行结尾会隐藏着一个换行符 \n)
  • 读取一个特别大的文件:

    1. # 方式一:
    2. start = 0
    3. while True:
    4. data = file_object.read(2)
    5. print(data)
    6. file_object.close() # 最后一直在循环空,终止条件不好设定。
    7. # 方式二:
    8. for line in file_object:
    9. line = line.strip() # 打印完后每行都存在一个换行符,strip 不但能去除空白,也能去除换行符\n
    10. print(line)

3.2 写操作

  • write(字符串)

    1. obj = open('a.txt',mode='w',encoding='utf-8')
    2. obj.write('中午你')
    3. obj.close()
  • write(二进制)

    1. obj = open('a.txt',mode='wb')
    2. # obj.write('中午你'.encode('utf-8'))
    3. v = '中午你'.encode('utf-8')
    4. obj.write(v)
    5. obj.close()
    6. # 字符串转换 “二进制”:
    7. v = "你好"
    8. data = v.encode('utf-8')
    9. # 二进制转换成字符串
    10. v = b'\xe6\x88\x91\xe5\xa5\xbd\xe5\x9b\xb0'
    11. data = v.decode('utf-8')
  • 写入练习:

    1. # 示例一 : 一般用于文字写入。
    2. f = open('a.txt',mode='w',encoding='utf-8')
    3. # a. 将 “你好” 根据encoding指定的编码转换成:
    4. # “你好” --> 10001000 10001000 10001000 10001000 10001000 10001000
    5. # b. 将二进制写入到文件中。
    6. f.write('你好') # w打开文件,则write传入字符串
    7. f.close()
    8. # 示例二:写入内容是否写在一行
    9. file_object = open('log.txt',mode = 'w',encoding = 'utf-8')
    10. # '你好小黑'写在一行
    11. file_object.write('你好')
    12. file_object.write('小黑')
    13. # '你好' 与 '小黑' 写成两行
    14. file_object.write('你好\n')
    15. file_object.write('小黑')
    16. file_object.close()
    17. # 示例三:一般用于图片/音频/视频/未知编码
    18. f = open('a.txt',mode='wb')
    19. # f.write('你好') # wb打开文件,则write传入的是二进制,但‘你好’是字符串不是二进制,需要转换后再写入。
    20. # 1. 把要写入的字符串转换成二进制
    21. data = "我好困"
    22. content = data.encode('utf-8') # 将字符串按照utf-8编码转换成二进制
    23. # 2. 再将二进制写到文件中
    24. f.write(content) # wb打开文件,则write传入的是 二进制
    25. f.close()
  • 注意:

    • 写完后一定要记得关闭(close)文件,如果没关闭就相当于写的东西直接写到内存了。
    • 关闭文件(close)就强制将内存刷到硬盘上了

3.3 其他操作

  • seek(光标字节位置),无论模式是否带b,都是按照字节进行处理。

    1. # 读取字符串
    2. obj = open('a.txt',mode='r',encoding='utf-8')
    3. obj.seek(3) # 跳转到指定字节位置
    4. data = obj.read()
    5. obj.close()
    6. print(data)
    7. # 读取字节
    8. obj = open('a.txt',mode='rb')
    9. obj.seek(3) # 跳转到指定字节位置
    10. data = obj.read()
    11. obj.close()
    12. print(data)
  • tell(), 获取光标当前所在的字节位置

    1. obj = open('a.txt',mode='rb')
    2. # obj.seek(3) # 跳转到指定字节位置
    3. obj.read()
    4. data = obj.tell()
    5. print(data)
    6. obj.close()
  • flush,强制将内存中的数据写入到硬盘

    1. v = open('a.txt',mode='a',encoding='utf-8')
    2. while True:
    3. val = input('请输入:')
    4. v.write(val)
    5. v.flush()
    6. v.close()

4. 关闭文件

文艺青年操作:

  1. v = open('a.txt',mode='a',encoding='utf-8')
  2. v.close()

二逼操作:

  1. with open('a.txt',mode='a',encoding='utf-8') as v:
  2. data = v.read()
  3. # 缩进中的代码执行完毕后,自动关闭文件

5. 文件内容的修改

  1. with open('a.txt',mode='r',encoding='utf-8') as f1:
  2. data = f1.read()
  3. new_data = data.replace('飞洒','666')
  4. with open('a.txt',mode='w',encoding='utf-8') as f1:
  5. data = f1.write(new_data)

大文件修改:

  1. f1 = open('a.txt',mode='r',encoding='utf-8')
  2. f2 = open('b.txt',mode='w',encoding='utf-8')
  3. for line in f1:
  4. new_line = line.replace('阿斯','死啊')
  5. f2.write(new_line)
  6. f1.close()
  7. f2.close()
  1. with open('a.txt',mode='r',encoding='utf-8') as f1, open('c.txt',mode='w',encoding='utf-8') as f2:
  2. for line in f1:
  3. new_line = line.replace('阿斯', '死啊')
  4. f2.write(new_line)

python day08 文件操作的更多相关文章

  1. 员工管理系统+字符编码+Python代码文件操作

    员工管理系统+字符编码+Python代码文件操作 1.员工管理系统 1.1  debug 代码调试 1.先使用鼠标左键在需要调试的代码左边点击一下(会出现一个红点)2.之后右键点击debug运行代码 ...

  2. Python :open文件操作,配合read()使用!

    python:open/文件操作 open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) 如何打开文件 handle=open(file_name,a ...

  3. Python 常见文件操作的函数示例(转)

    转自:http://www.cnblogs.com/txw1958/archive/2012/03/08/2385540.html # -*-coding:utf8 -*- ''''' Python常 ...

  4. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  5. 孤荷凌寒自学python第三十三天python的文件操作初识

     孤荷凌寒自学python第三十三天python的文件操作初识 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天开始自学python的普通 文件操作部分的内容. 一.python的文件打开 ...

  6. python中文件操作的六种模式及对文件某一行进行修改的方法

    一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...

  7. python中文件操作的其他方法

    前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...

  8. Python常见文件操作的函数示例

    # -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() ...

  9. python的文件操作及简单的用例

    一.python的文件操作介绍 1.文件操作函数介绍 open() 打开一个文件 语法:open(file, mode='r', buffering=-1, encoding=None, errors ...

随机推荐

  1. express中遇到的一个小问题“403”

    这样子的一个express简单项目文件执行会出现403 Forbidden的错误: var express = require('express'); var app = express(); app ...

  2. 内存泄漏学习案例-1-ArrayList

    解决 内存泄漏 于是赶快登陆探测服务器,首先是 top free df 三连,结果还真发现了些异常. 我们的探测进程 CPU 占用率特别高,达到了 900%. 我们的 Java 进程,并不做大量 CP ...

  3. Solr4.7.0连接PostgreSQL

    1.把PostgreSQL的Jar包  例如:postgresql-9.1-901-1.jdbc4.jar  或其他版本 放到D:\apache-tomcat-7.0.57\webapps\solr\ ...

  4. mac下 chmod 不了文件,可以右键查看文件简介处修改权限

  5. 64 位 Windows 平台开发注意要点之注册表重定向

    Window 系统错误代码 ERROR_SUCCESS,本博客中一律使用 NO_ERROR 代替.虽然 ERROR_SUCCESS 与 NO_ERROR 是完全等价的,都代表成功,但是后者却和其他错误 ...

  6. 【安全测试自学】初探web安全处测试(二)

    自学资料: 安全测试专家成长系列之-初探Web安全2.mp4 XSS攻击 案例7:IPhone5 XSS盲打酷狗+后台SQL注射 CSRF即跨站请求伪造攻击: 举例: 上传漏洞: 危害: 文件包含漏洞 ...

  7. 【转】【测试用例设计】WEB通用测试用例

    易用性 1.便于使用.理解.并能减少用户发生错误选择的可能性 2.当数据字段过多时,使用便于用户迅速吸取信息的方式表现信息,突出重点信息,标红等方式 3.显示与当前操作相关的信息,给出操作提示. 4. ...

  8. thunderbird 163 smtp

    thunderbird 163 smtp 如果要正常发送,配置如下: server: smtp.163.com port: 465 auth: Normal password security: SS ...

  9. NFS服务器工作原理

    一.NFS简介 NFS是Network File System的缩写,中文称为网络文件系统,它的主要功能是通过网络(一个局域网)让不同的主机系统之间可以共享文件或目录,NFS的客户端(一般为应用服务器 ...

  10. Spring Boot——Linux 启动方式

    1.前台启动:(ctrl+c会关闭程序) java -jar    ****.jar 2.后台启动:(& 后台启动) java -jar    ****.jar & 3.控制台输出启动 ...