简要目录:

open函数

将文件设置为utf-8编码格式

UnicodeDecodeError

f.read() 和 f.read(size)

f.readline() 和 f.readlines()

f.tell():返回文件指针的位置,注意换行符

f.writelines() 和 f.write()

f.seek():设置文件指针的位置 —— f.seek(偏移量,[起始位置])

文件指针

with open:可以不需要显式关闭文件操作:f.close()

f.__next__():读取下一行

mode的详细参数

Python通过创建文件对象,进行磁盘文件的读写(IO)。

主要函数:def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

file:指的是文件路径

mode:读写模式,单个的模式主要有:

buffering:缓存模式

encoding:编码格式

newline:要是针对不同操作系统的换行符不一致产生的策略

部分参数解释:

mode:(可组合)

========= ===============================================================Character Meaning--------- ---------------------------------------------------------------

'r' open forreading (default)'w' open forwriting, truncating the file first'x' create a new file and open it forwriting'a' open for writing, appending to the end of the file ifit exists'b'binary mode't'text mode (default)'+' open a disk file for updating (reading andwriting)'U'universal newline mode (deprecated)========= ===============================================================

buffering:

buffering isan optional integer used to set the buffering policy.

Pass 0 to switch buffering off (only allowedin binary mode), 1to select

line buffering (only usablein text mode), and an integer > 1to indicate

the size of a fixed-size chunk buffer. When no buffering argument isgiven, the default buffering policy works as follows:* Binary files are buffered in fixed-size chunks; the size of the bufferis chosen using a heuristic trying to determine the underlying device's

"block size" andfalling back on `io.DEFAULT_BUFFER_SIZE`.

On many systems, the buffer will typically be4096 or 8192bytes long.* "Interactive" text files (files forwhich isatty() returns True)

use line buffering. Other text files use the policy described abovefor binary files.

newline:

newline controls how universal newlines works (it only applies to text

mode). It can be None,'', '\n', '\r', and '\r\n'. It works as

follows:* On input, if newline is None, universal newlines mode isenabled. Linesin the input can end in '\n', '\r', or '\r\n', andthese are translated into'\n'before being returned to the

caller. If itis '', universal newline mode isenabled, but line

endings are returned to the caller untranslated. If it has any of

the other legal values, input lines are only terminated by the given

string,and the line ending isreturned to the caller untranslated.* On output, if newline is None, any '\n'characters written are

translated to the system default line separator, os.linesep. If

newlineis '' or '\n', no translation takes place. If newline isany

of the other legal values, any'\n'characters written are translated

to the given string.

具体示例:

1. 首先建立文件如下,使用utf-8编码:打开原txt-->输入文本-->另存为utf-8-->覆盖原txt 【将文件设置为utf-8编码格式】

2. UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 54: illegal multibyte sequence

出现这个错误时,一般是因为encoding未设置造成,例如:

f1 = open(path, 'r')

a= f1.read() #read()一次读取全部内容,数据量很大时建议使用readline或者read(1024)等,1024表示字节数#UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 54: illegal multibyte sequence

print(a)

f1.close()

解决:

f2 = open(path, 'r', encoding='utf-8')

a= f2.read() #read()一次读取全部内容,数据量很大时建议使用readline或者read(1024)等,1024表示字节数

print(a)

f2.close()

3. f.read() 和 f.read(size)

f.read():一次读取整个文件

f.read(size):一次读取size字节大小的数据

#------------------------------

f2 = open(path, 'r', encoding='utf-8')

a= f2.read() #read()一次读取全部内容,数据量很大时建议使用readline或者read(1024)等,1024表示字节数

print(a)

f2.close()#------------------------------

f3 = open(path, 'r', encoding='utf-8')

a= f3.read(4) #数据量很大时建议使用readline或者read(size)等,size表示字节数

print(a)

f3.close()

4. f.readline() 和 f.readlines()

f.readline():每次读取一行,注意文件指针的位置

f.readlines():一次读取多行,构成list

#------------------------------

f4 = open(path, 'r', encoding='utf-8')

a= f4.readline() #readline()一次读取一行

print(a)

f4.close()#-----------------------------

f5 = open(path, 'r', encoding='utf-8')

a= f5.readlines() #readlines()一次读取多行,构成list,可以用于迭代

print('a:',a)

f5.close()

5. f.tell():返回文件指针的位置,注意换行符

f7 = open(path, 'r', encoding='utf-8')

a= f7.readline() #readlines()一次读取多行,构成list,可以用于迭代

print(a)

cc= f7.tell() #返回文件当前位置

print(cc)

f7.close()

6. f.writelines():向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

r+:文件指针从开头开始读写

w+:打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

f8 = open(path, 'r+', encoding='utf-8') #r+文件指针从开头开始读写

a = f8.readlines() #readlines()一次读取多行,构成list,可以用于迭代

print('a:',a)

f8.writelines(['\n陈王昔时宴平乐,斗酒十千恣戏虐\n','哎,李白']) #向文件写入一个序列字符串列表,此时文件指针在结尾处,相当于追加了

dd =f8.read()print('dd:',dd) #此时文件指针在末尾,所以为空

f8.close()

7. f.write():写入单个字符串

f9 = open(path, 'r+', encoding='utf-8') #r+文件指针从开头开始读写

a = f9.readlines() #readlines()一次读取多行,构成list,可以用于迭代

print('a:',a)

f9.write('\n陈王昔时宴平乐,斗酒十千恣戏虐') #通过上述读操作,文件指针在结尾处;此时写操作也会在结尾处进行

b =f9.read()print('b:',b) #为空,因为文件指针的位置

f9.close()

8. f.seek():用于设置文件指针的位置 —— f.seek(偏移量,[起始位置])

a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

f10 = open(path, 'r', encoding='utf-8')

a= f10.readlines() #readlines()一次读取多行,构成list,可以用于迭代

print('a:',a)

f10.close()

f11= open(path, 'a+', encoding='utf-8') #a+模式用于追加

f11.write('\n陈王昔时宴平乐,斗酒十千恣戏虐')

b=f11.read()print('b:',b) #这里值为空,是因为文件指针此时在文件的末尾;如果要读数据,需要设置文件指针的位置

f11.seek(6,0) #f.seek(偏移量,[起始位置]),用来移动文件指针;偏移量: 单位为比特(字节),可正可负;起始位置: 0-文件头, 默认值; 1-当前位置; 2-文件尾

b =f11.read()print('b:',b)

f11.close()

9. 文件指针

#文件指针

f12 = open(path, 'a+', encoding='utf-8') #a+模式用于追加

f12.write('\n陈王昔时宴平乐,斗酒十千恣戏虐')

c= f12.tell() #返回文件当前位置,因为a+,所以上述的write操作在末尾进行,然后文件指针也在末尾了:269

print('c:',c)

f12.seek(6,0) #f.seek(偏移量,[起始位置]),用来移动文件指针;偏移量: 单位为比特(字节),可正可负;起始位置: 0-文件头, 默认值; 1-当前位置; 2-文件尾

d = f12.tell() #返回文件当前位置,经过偏移之后为:6

print('d:',d)

e= f12.read() #读取整个文件,读完后又到末尾了

print('e:',e)

f= f12.tell() #返回文件当前位置,此时在末尾:269

print('f:',f)

f12.close()

10. with open:可以不需要显式关闭文件操作:f.close()

f.__next__():读取下一行

#------------------------------------#2. with open:可以不需要显式关闭文件操作:f.close

with open(path, 'r', encoding='utf-8') as f13:

a= f13.readlines() #readline()一次读取一行

print(a)#下一行:f.__next__()

with open(path, 'r', encoding='utf-8') as f13:

a= f13.readline() #readline()一次读取一行

print('a:',a)

b= f13.__next__()print('b:',b)

11. mode的详细参数(来自菜鸟教程):

模式描述

t

文本模式 (默认)。

x

写模式,新建一个文件,如果该文件已存在则会报错。

b

二进制模式。

+

打开一个文件进行更新(可读可写)。

U

通用换行模式(不推荐)。

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。

r+

打开一个文件用于读写。文件指针将会放在文件的开头。

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。

w

打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

w+

打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

默认为文本模式,如果要以二进制模式打开,加上 b 。

参考:

python open读取_Python:open的文件读取操作,utf-8,UnicodeDecodeError相关推荐

  1. Python对spss类型的sav文件读取操作

    一.安装库 python要对sav类型文件进行操作,需要安装savReaderWriter模块 savReaderWriter模块下载链接 下载后解压进入文件夹 在地址栏输入cmd 输入命令进行安装 ...

  2. python 读取txt文件为字典_python将txt文件读取为字典的示例

    如下所示: # -*- coding: utf-8 -*- # @Time :18-8-2 下午3:23 import sys reload(sys) sys.setdefaultencoding(' ...

  3. Python自动化必会技能-Excel文件读取

    01 重点 在自动化测试过程中,经常需要使用excel文件来存储测试用例,那么在表格内设计好了测试用例数据后,如何通过自动化读取呢?此时就需要测试小姐姐动手写"代码"了~ 本文主要 ...

  4. python实现红警三录像文件读取与自动分析生成流程图信息——二、项目结构与代码初步介绍

    总目录 一.简介 二.项目结构与代码初步介绍 三.拓展给mod使用 ======================= 大爽歌作,made by big shuang ================== ...

  5. Python read,readline,readlines和大文件读取

    原本,我觉得read,readline,readlines比较简单,没什么好说的,本没打算要单独说一说的,但是在一次面试的时候,面试官问到了这个问题,但我并没有回答的很好,在面对大文件时的处理,没有给 ...

  6. python io操作有什么_Python笔记:文件IO操作

    读取文件 使用open()打开文件,文件不存在会抛出IOError错误. try: f = open('/path/to/file', 'r') print(f.read()) finally: if ...

  7. python打开dat文件_python中对文件的操作

    """ 在变量,序列(这里的序列其实就是元组,列表,字符串,集合,字典)和对象中存储的数据是暂时的,程序结束就会丢失. 为了能够长世界地保存程序中的数据,需要将程序中的数 ...

  8. java 文件读取中文乱码_java文件读取时发生中文乱码怎么解决

    java文件读取时发生中文乱码怎么解决 发布时间:2020-06-23 09:33:47 来源:亿速云 阅读:59 作者:Leah java文件读取时发生中文乱码怎么解决?这篇文章运用了实例代码展示, ...

  9. python html生成图片_Python将html文件转为图片

    背景 在上一期玩转Echarts5中,留了一个问题:将html转为图片.周末亲测,发现cancas可以提取并保存,但是 块中的背景图片缺没有办法再拼接保存,尤其是LBS可视化. 于是,本主再次基础重器 ...

  10. Codesys的文件读取功能---G代码文件读取及运行

    1.序言 前文已经介绍过Codesys软件可以将dxg格式的CAD文件直接读取出来转换成G代码,导入到软件可以使用的CNC程序,通过对该CNC程序的编程,可以实现将CAD图纸转成CNC指令并运行,参考 ...

最新文章

  1. Linux 常用技巧记录
  2. FPGA之道(56)状态的编码方式
  3. javascript 深度克隆
  4. 中欧光伏“双反”案:何以平地起波澜?
  5. iOS - 让view触发点击事件
  6. 别为iptables日志付出太多-一种Linux防火墙优化方法
  7. Hashtable.ContainsKey跟Hashtable.Contains的区别
  8. Idea中Terminal中git基本操作
  9. GetDisplayName 获取枚举的显示值
  10. 总结!进入libvirt的虚拟化世界(一)得到libvirt的连接
  11. 消息中间件--RabbitMQ --死信队列
  12. java transform的作用_为什么旋转(0deg)很重要?
  13. c语言堆栈基本代码入栈出栈_几道和「堆栈、队列」有关的面试算法题
  14. (淘宝无限适配)手机端rem布局详解(转载非原创)
  15. 2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
  16. matlab 去掉矩阵中某些元素,怎么修改矩阵中的某些元素 或者简单点说保留矩阵中的元素...
  17. 新胖子公式 (10 分)
  18. vscode 调试 PHP 打造PHP本地开发环境
  19. 基于js利用经纬度进行两地的距离计算(转)
  20. echarts 3d地球js特效代码

热门文章

  1. CVPR2020目标跟踪,共33篇
  2. 浅谈技术难度与公司收益
  3. c++11 is_copy_assignable说明
  4. GPRS无线数据采集器通信范例
  5. 社交平台数据提取:Social Phone Extractor
  6. 弱电施工流程及规范(三)
  7. Hack the Box 邀请码的获取
  8. ADO.NET三层架构
  9. python怎么写脚本执行adb命令_android – 如何使用Python执行adb命令?
  10. vba和matlab处理数据类型,VBA数据类型与转换