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. 如何创建 Visual Studio 2017 RC 离线安装包

    创建 Visual Studio 的离线安装计划 首先下载相应版本的可执行文件,例如:vs_community.exe.vs_enterprise.exe 或 vs_professional 在 cm ...

  2. 【JavsScript高级程序设计】学习笔记[1]

    1. 在HTML中使用javascript 在使用script嵌入脚本时,脚本内容不能包含'</script>'字符串(会被认为是结束的标志).可以通过转义字符解决('\') 默认scri ...

  3. HBase错误大全

    1. stopping hbasecat: /tmp/hbase-root-master.pid: No such file or directory 原因:hadoop的pid文件丢失,hadoop ...

  4. SPOJLCS Longest Common Substring

    题意 A string is finite sequence of characters over a non-empty finite set Σ. In this problem, Σ is th ...

  5. 学习动态性能表(3)--v$sql&v$sql_plan

    学习动态性能表 第三篇-(1)-v$sq 2007.5.25 V$SQL中存储具体的SQL语句. 一条语句可以映射多个cursor,因为对象所指的cursor可以有不同用户(如例1).如果有多个cur ...

  6. JAVA内置注解 基本注解

    温故而知新,可以为师矣! 每天复习,或者学习一点小东西,也能水滴石穿! 今天复习5个JAVA内置基本注解(贴代码胜过千言万语): package com.lf.test; import java.ut ...

  7. 使用XV-11激光雷达做hector_slam

    大家在学习ROS中不可避免需要使用激光雷达,高精地图.实时定位以及障碍物检测等多项技术,而这些技术都离不开光学雷达的支持,但是呢雷达这真是太贵了,大部分人是负担不起(实验室.研究所土豪可以略过),但是 ...

  8. CAN总线优点

    废除传统的站地址编码,代之以对通信数据块进行编码,可以多主方式工作: 采用非破坏性仲裁技术,当两个节点同时向网络上传送数据时,优先级低的节点主动停止数据发送,而优先级高的节点可不受影响继续传输数据,有 ...

  9. Annotation之二:@Inherited注解继承情况

    @Inherited annotation类型是被标注过的class的子类所继承.类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation. 子类中能否继承注解 ...

  10. redis实现消息发布/订阅

    redis实现简单的消息发布/订阅模式. 消息订阅者: package org.common.component; import org.slf4j.Logger; import org.slf4j. ...