Python中文件处理的操作包括读、写、修改,今天我们一起来先学习下读和写操作。

一、文件的读操作

  例一:

#文件读操作

f = open(file="first_blog.txt",mode = 'r',encoding='gbk')
#‘r’表示只读模式(打开仍然为文件),encoding = 'gbk'表示原文件的存储格式为'gbk',打开时必须告诉程序将gbk转成unicode(python3编码默认Unicode) data = f.read() # 读取所有内容,内容是已经转换完毕的字符串 print(data)  # 打印到屏幕 f.close()#文件打开后必须关闭
'''
输出:
write by congcong Hello world! 这是我用python打开的第一个文件。 '''

  例二:

#文件二进制读模式

f = open(file="first_blog.txt",mode = 'rb')
#‘rb’表示以二进制读模式(硬盘存为存的二进制打开就为二进制,并且不再需要指定编码) data = f.read() print(data) f.close() '''
输出:
b'write by congcong\r\n\r\nHello world!\r\n\r\n\xd5\xe2\xca\xc7\xce\xd2\xd3\xc3python\xb4\xf2\xbf\xaa\xb5\xc4\xb5\xda\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xa1\xa3\r\n\r\n' '''

  大家能看出例一和例二的区别吗?

  区别在于例二直接以rb模式打开了文件 ,rb是指二进制模式,数据读到内存里直接是bytes格式,

如果想要看内容,还需要手动decode,因此在文件打开阶段,不需要指定编码。

  那如果我们不知道一个文件是以什么编码保存的怎么办呢?

  方式一:尝试使用各种编码方式,总有一款是的,的确可以,不过感觉傻傻的,有没有更好的方法呢?

  方法二:导入一个叫 chardet 的外部工具(首先你要联网安装,Python3安装方法命令行输入:pip3 install chardet)

import chardet
res = chardet.detect(open('first_blog.txt',mode='rb').read())
print(res) '''
输出:
{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'} # confidence 表示可信程度
'''

  例三(循环读取):

# -*- coding:utf-8 -*-

f = open("for_line.txt",mode = 'r',encoding='gbk')

for line in f:  #按行读取
print(line) f.close() '''
输出:
键盘字母排序如下: qwertyuiop asdfghjkl zxcvbnm
'''
#中间有空行的原因:print本身有换行的特点

  注意:   

  • 文件操作时,以 “r”或“rb” 模式打开,则只能读,无法写入;
  • 硬盘上保存的文件都是某种编码的0101010,打开时需要注意:
    • rb,直接读取文件保存时原生的0101010,在Python中用字节类型表示
    • r和encoding,读取硬盘的0101010,并按照encoding指定的编码格式进行断句,再将“断句”后的每一段0101010转换成unicode的 010101010101,在Python中用字符串类型表示

二、文件的写操作

  写操作里可以分为覆盖写文件(‘w’和‘wb’)和追加写文件(‘a’和‘ab’)两大类。

  1、覆盖写文件

    示例如下:  

# -*- coding:utf-8 -*-
#特别注意当mode的模式为‘w’时,是创建新文件,当文件名与原文件相同时,原文件被清空重写
f = open("write.txt",mode = 'w',encoding='gbk') #普通文件的写
f.write('这是第一个我用Python写的文件!') # 自动将写的Unicode字符串转为gbk编码的二进制串。
f.close() f2 = open("write2.txt",mode = 'wb') #以二进制写文件,主要用于视频图片等文件的传输
f2.write("这是用二进制写的第一个文件!".encode('gbk'))# 二进制写必须要加encode(),将写的unicode进行编码成指定格式的二进制存储,Python3默认是utf-8
f2.close()  

  注意:

    文件覆盖写操作时,以 “w”或“wb” 模式打开,则只能写,并且在打开的同时会先将内容清空。

    写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:

    •   wb,写入时需要直接传入以某种编码的0100101,即:字节类型,二进制写必须加encode()将写的Unicode
    •   w 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010  

2、追加写文件

    示例如下:

#特别注意当mode的模式为‘a’时,是文件追加模式,就是接着写文件
f3 = open('write.txt',mode='a',encoding='gbk')
f3.write('\n这是追加的文本1!')  # 自动将写的Unicode字符串转为gbk编码的二进制串。 f3.write('\n这是追加的文本2!')
f3.write('\n这是追加的文本3!')
f3.close() f4 = open('write3.txt',mode = 'ab')#以二进制追加文件,主要用于视频图片等文件的传输
f4.write('\n这是用二进制追加的文件!'.encode('gbk')) # 二进制追加写也必须要加encode(),将写的unicode进行编码成指定格式的二进制存储,Python3默认是utf-8
f4.close()

  文件追加写操作时,以 “a”或“ab” 模式打开,则只能追加,即:在原来内容的尾部追加内容

  写入到硬盘上时,必须是某种编码的0101010,打开时需要注意:

    •   ab,写入时需要直接传入以某种编码的0100101,即:字节类型,二进制追加写必须加encode()将写的unicode字符串转为指定编码的二进制串,不指定时Python3默认utf-8。
    •   a 和 encoding,写入时需要传入unicode字符串,内部会根据encoding制定的编码将unicode字符串转换为该编码的 010101010

 三、文件的读写(r+)和写读(w+)混合模式 

  1、文件的读写(r+)

    示例如下:

#-*-coding:utf-8-*-

f = open(file='write.txt',mode='r+',encoding='gbk') # r+ 表示读写模式
print('读写前:\n',f.read())
f.write('这是读写模式下的内容\n')
f.write('这是读写模式下的内容\n')
print('读写后:\n',f.read())
f.close()
'''
读写前:
这是第一个我用Python写的文件!
这是追加的文本1!
这是追加的文本2!
这是追加的文本3!
读写后:
'''

 注意:读写模式下只能查看之前已存在的内容,而写入的内容无法再读出来(与光标的移动有关,下一篇会细说),打开文件查看,写入的内容已经追加到了之前写的最后面。

  2、文件的写读(‘w+’,使用非常少,了解即可)

    示例如下:

# -*-coding:utf-8-*-

f = open(file='write.txt',mode='w+',encoding='gbk')
print('写读前:\n',f.read())
f.write('这是写读模式下的内容\n')
f.write('这是写读模式下的内容\n')
print('写读后:\n',f.read())
f.close() '''
写读前: 写读后:
'''

 注意: 文件的写读模式会先清空原先文件里存在的内容,再写入你即将要写的内容,相当于覆盖写,不同在于可以查看写入的内容,

需要移动文件中光标位置。下一篇的文件常用操作方法中会细品。

  

    

  

python文件处理-读、写的更多相关文章

  1. 总结day7 ---- 文件操作,读,写,追加,以及相关方法

    内容大纲 一:文件的基本操作, >常见问题 >encoding >绝对路径和相对路径的 二:文件的读写追加相关操作 >读(r, r+ ,rb,r+b) >写(w,w+,w ...

  2. Python小实验——读&写Excel文件内容

    安装xlrd模块和xlwt模块 读取Excel文件了内容需要额外的模块-- \(xlrd\),在官网上可以找到下载:https://pypi.python.org/pypi/xlrd#download ...

  3. Python文件读写 - 读一个文件所有行,加工后写另一个文件

    #Filename: file_read_and_write.py #打开文件,cNames读取所有行,储存在列表中,循环对每一行在起始处加上序号1,2,3,4 with open(r'file/co ...

  4. asp.net 文件操作小例子(创建文件夹,读,写,删)

      静态生成要在虚拟目录下创建文件夹 来保存生成的页面 那么就要对文件进行操作 一.创建文件夹 using System.IO; string name = "aa"; strin ...

  5. python文件(概念、基本操作、常用操作、文本文件的编码方式)

    文件 目标 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 01. 文件的概念 1.1 文件的概念和作用 计算机的 文件,就是存储在某种 长期储存设备 上的一段 数据 长期存储 ...

  6. python文件

    目录 1. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 2. 文件的基本操作 2.1 操作文件的套路 2.2 操作文件的函数/方法 2.3 read 方法 -- 读取文件 2.4 打 ...

  7. Learning-Python【9】:Python文件操作

    1.什么是文件 文件是操作系统提供给用户或应用程序的一种虚拟单位,该虚拟单位直接映射的是硬盘空间.通俗点说,文件就是存放数据的地方 2.为何要处理文件 用户或应用程序直接操作文件(读/写)就被操作系统 ...

  8. Python文件操作:文件的打开关闭读取写入

    Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...

  9. python文件操作:字符编码与文件处理

    一.字符编码 二.文件处理 一.字符编码 储备知识点: 1. 计算机系统分为三层: 应用程序 操作系统 计算机硬件 2. 运行python程序的三个步骤 1. 先启动python解释器 2. 再将py ...

随机推荐

  1. Node.js 问题集合

    使用node合并多个接口, 最后获取数据慢的问题                暂时没解决方法 pm2 访问 ip 记录到日志                                      ...

  2. 使用flowable 6.1.2 REST API 运行请假审批流程

    一.下载 flowable rest war 包 http://download.csdn.net/detail/teamlet/9913312 二.部署 复制flowable REST.war到To ...

  3. Android快速开发-选项卡

    介绍 几行代码实现Android选项卡界面,支持标准底部Tab自定义视图选项卡,头部文字选项卡. 底部自定义视图选项卡 先来看看实现下图中的效果我们代码应该怎么写? 实现上图效果只需以下代码: pub ...

  4. ORM版,学生管理系统02

    学生管理系统 urls.py url(r'^student_list/$',views.student_list,name="student_list"), url(r'^dele ...

  5. svn的使用流程

    一.安装: 1. 服务器端:VisualSVN_Server 2. 客户端:TortoiseSVN 二.使用VisualSVN Server建立版本库 1. 首先打开VisualSVN Server ...

  6. centos7怎么把语言切换成英语

    一.简介 在Linux的系统中经常碰到字符集导致的错误,本文总结了设置修改系统语言环境的方法步骤. 二.操作步骤 执行如下指令,查看当前使用的系统语言 echo $LANG 执行如下指令,查看系统安装 ...

  7. CentOS 6.5添加网易163源

    换国内的yum源. 准备工作,首先备份/etc/yum.repos.d/CentOS-Base.repo              cd /etc/yum.repos.d/ wget http://m ...

  8. PS更换证件照颜色

    PS是我们经常使用的设计软件,在生活中使用的范围也很广,但是对于普通的用户来说,也就是平时给自己的照片美化一下,还有就是做一些证件照.今天和大家分享的是更改证件照的颜色,网上可能有很多,但是个人感觉都 ...

  9. 安装Oracle数据库操作步骤

    第一步: 第二步: 第三步: 第四步: 第五步:输入密码 第六步:继续 第七步: 第八步:进入主页后 第九步:登录进去后是这样子 第十步: 第十一步: 第十二步: 最后一步:看到桌面上有个图标就说明安 ...

  10. ASP.NET 线程详解

    本文是博主翻译文章,估计会省略一些,但是我尽量能翻译好,各个知识点通俗易懂.译文如下: ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0 我简 ...