以前的代码都是直接将数据输出到控制台,实际上我们也可以通过读/写文件的方式读取/输出到磁盘文件中,文件读写简称I/O操作。文件I/O操作一共分为四部分:打开(open)/读取(read)/写入(write)/关闭(close)……

一.文件的打开 open

在python中打开文件使用函数open(),该函数返回文件句柄,具体使用方法如下:

file = open("文件名","打开文件模式")

# 示例代码:
# 打开d:/1.txt文件,如果d盘没有这个文件,会自动在d盘创建1.txt的空白文件,file是返回的文件句柄供读/写/关闭文件操作
file = open("d:/1.txt","wb")

其中,打开文件模式有以下几种类型:

二.文件的关闭 close

文件在打开读写之后记得要有关闭操作,就好比蹲完坑得擦屁股,关闭文件使用close()函数。注意:文件关闭之后,不能在继续对文件读写操作,如果需要读写操作需要重新open()打开文件。

file.close() # 关闭文件

三.文件的读取 read

文件打开之后,可以通过返回的文件句柄读取文件中的内容,文件读取有以下几个函数:

1.file.read( [count] ) — count表示需要读取的文字长度,conut是缺省参数,如果没有设置count值,默认读取整个文件所有内容,该函数返回读取到的内容;

2.file.readline() — 读取文件一行数据,返回读取的内容

3.file.readlines() — 读取文件的所有行内容,返回读取的所有内容,注意:返回的数据类型是列表,列表中每个数据都是文件中的一行数据;

4.注意:文件读取返回的内容并非字符串str类型,而是字节类型bytes类型,b’ ‘前缀代表的就是bytes.

如果想将bytes类型转为字符串直接使用bytes.decode()即可,decode()默认使用utf-8编码;

假如d:/1.txt中的内容如下:

@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

文件读取的三种方式示例代码如下:

# 方法一:
print("方法一:使用 read() 函数读取txt内容")
file_object = open("d:/1.txt","rb")
contents = file_object.read() # 默认读取所有内容 # 读取文件内容,如果文件中含有中文需要decode()解码,否则中文无法显示
print(contents)
print("---"*20)
# 使用decode()解码中文,默认解码格式为utf-8
print("使用decode()函数解码中文:")
print(contents.decode())
file_object.close() print("***"*20)
# 方法二:
print("方法二:使用 readline() 函数读取txt内容")
file_object = open("d:/1.txt","rb")
while True:
contents = file_object.readline()
print(contents.decode())# 使用decode()解码中文,默认解码格式为utf-8
if len(contents) == 0: # 读取内容长度为0,读取结束
break
file_object.close() print("***"*20)
# 方法三:
print("方法三:使用 readlines() 函数读取txt内容")
file_object = open("d:/1.txt","rb")
# readlines() 返回列表,一行数据就是列表中的一个元素
contents = file_object.readlines()
# 遍历列表
for content in contents:
print(content.decode())# 使用decode()解码中文,默认解码格式为utf-8
file_object.close()

输出结果:

方法一:使用 read() 函数读取txt内容

b'@Blog(\xe4\xb8\xaa\xe4\xba\xba\xe5\x8d\x9a\xe5\xae\xa2\xe5\x9c\xb0\xe5\x9d\x80): shuopython.com\r\n@WeChat Official Account(\xe5\xbe\xae\xe4\xbf\xa1\xe5\x85\xac\xe4\xbc\x97\xe5\x8f\xb7)\xef\xbc\x9a\xe7\x8c\xbf\xe8\xaf\xb4python\r\n@Motto:\xe4\xb8\x8d\xe7\xa7\xaf\xe8\xb7\xac\xe6\xad\xa5\xe6\x97\xa0\xe4\xbb\xa5\xe8\x87\xb3\xe5\x8d\x83\xe9\x87\x8c\xef\xbc\x8c\xe4\xb8\x8d\xe7\xa7\xaf\xe5\xb0\x8f\xe6\xb5\x81\xe6\x97\xa0\xe4\xbb\xa5\xe6\x88\x90\xe6\xb1\x9f\xe6\xb5\xb7\xef\xbc\x8c\xe7\xa8\x8b\xe5\xba\x8f\xe4\xba\xba\xe7\x94\x9f\xe7\x9a\x84\xe7\xb2\xbe\xe5\xbd\xa9\xe9\x9c\x80\xe8\xa6\x81\xe5\x9d\x9a\xe6\x8c\x81\xe4\xb8\x8d\xe6\x87\x88\xe5\x9c\xb0\xe7\xa7\xaf\xe7\xb4\xaf\xef\xbc\x81\r\n'
------------------------------------------------------------
使用decode()函数解码中文:
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! ************************************************************
方法二:使用 readline() 函数读取txt内容 @Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累! ************************************************************
方法三:使用 readlines() 函数读取txt内容 @Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

四.文件的写入 write

文件写入可通过函数write()完成,使用比较简单,先看看语法:

file.write( [bytes] ) — 直接传入 bytes 类型的字符即可,b”   “前缀代表的就是bytes. 使用比较简单,直接上代码:

file_object = open("d:/2.txt","wb")

# '\n' 是文件I/O中的换行符,写完文件之后,自动换行
file_object.write(b"1234567\n")
# 注意单引号和双引号的配合使用
file_object.write(b"file_object.write(b'sad')\n")
file_object.write(b"python \n") file_object.close()

d:/2.txt 的内容如下:

1234567
file_object.write(b'sad')
python

注意:写入方式“wb” ,每次写入文件都会覆盖上一次的内容,即写入之前的内容会被清空;

五.文件偏移 seek

有人看了上面read()函数的示例代码可能会觉得频繁的打开和关闭文件会比较麻烦。那么仅仅打开和关闭文件一次,通过文件的偏移也能完成上述功能,文件的偏移使用 seek() 函数 。一般而言,seek()函数和tell()函数都搭配使用:

1.file.seek([offset],[whence]) — whence 表示偏移的位置,0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起;offset 表示相对whence 偏移多少个字节;

2.file.tell() — 相对于文件开始位置,当前偏移的字节数,该函数也可以用来计算整个文件的bytes长度;

注意:一般只要调用read/readline/readlines/write等函数,文件指针会自动发生偏移,使用上面两个函数的示例代码如下:

file_object = open("d:/2.txt","rb")

# 获取当前的文件偏移,由于还没开始读取内容,偏移量等于 0
count = file_object.tell()
print(count)
# 读取文本所有数据内容,文件自动偏移到文件末尾
contents = file_object.read()
# 获取整个文件的偏移量 ,实际上就是文件内容的大小
count = file_object.tell()
print(count)
# 将文件指针偏移到文件开始位置
file_object.seek(0,0)
# 读取一行数据,按道理讲应该是获取第一行数据
contents = file_object.readline()
print(contents.decode())
# 获取当前偏移量
count = file_object.tell()
print(count)
# 继续读取一行数据
contents = file_object.readline()
print(contents.decode())
# 获取当前偏移量
count = file_object.tell()
print(count)
file_object.close()

输出内容:

0
474
python教程 - 猿说python : 第一行数据 www.shuopython.com
68
python教程 - 猿说python : 第二行数据 www.shuopython.com
136

六.重点总结

1.file.read( [count] )函数可以设置读取指定的长度,例如:只读取10个字符read(10);

2.file.readlines()返回值是列表,并非bytes类型,而列表中的每一个元素都是文件中的一行数据,类型是bytes类型;

3.如果文件读取的内容含有中文,需要通过函数decode()解码转为字符串,decode()默认为utf-8解码;

4.文件open之后记得close,养成良好的书写习惯;

猜你喜欢:

1.python列表推导式

2.python字典推导式

3.python return逻辑运算

转载请注明:猿说Python » python文件读写操作

技术交流、商务合作请直接联系博主
扫码或搜索:猿说python
猿说python
微信公众号 扫一扫关注

python 文件读写操作(24)的更多相关文章

  1. Python 文件读写操作实例详解

    Python提供了必要的函数和方法进行默认情况下的文件基本操作.你可以用file对象做大部分的文件操作 一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前 ...

  2. Python—文件读写操作

    初识文件操作 使用open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了,根据打开文件的方式不同能够执行的操作也会有相应的差异. 打开文件的方式: r, w, a, ...

  3. python文件读写操作与linux shell变量命令交互执行

    python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼! #coding=utf-8 #!/usr/bin/python import os impor ...

  4. 一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)

           关于文件操作的几种常用方式,网上已有很多解说,内容很丰富,但也因此有些杂乱复杂.今天,我就以我个人的学习经验写一篇详细又易懂的总结文章,希望大家看完之后会有所收获. 一.核心功能 ‘r’ ...

  5. python文件读写操作

    操作文件时一般经历以下步骤: 打开文件 操作文件 1.打开文件: 文件句柄 = open('/path/to/file_name','pattern') pattern: r:只读模式,打开文件时默认 ...

  6. python 文件读写操作打开模式

    ‘r’:只读.该文件必须已存在. ‘r+’:可读可写.该文件必须已存在,写为追加在文件内容末尾. ‘rb’:表示以二进制方式读取文件.该文件必须已存在. ‘w’:只写.打开即默认创建一个新文件,如果文 ...

  7. python里文件读写操作

    文件读写操作一种基本操作,但是里面也存在很多需要注意的问题,例如字符编码.内存缓冲.指针位置等等.如果忽视这些问题就会引起很多不必要的麻烦.简单来说,文件的读写分为几个过程: 打开文件,并定义操作文件 ...

  8. python(三)一个文件读写操作的小程序

    我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1. ...

  9. c语言文件读写操作总结

    C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...

随机推荐

  1. Cogs 329. K- 联赛(最大流)

    K- 联赛 ★★★ 输入文件:kleague.in 输出文件:kleague.out 简单对比 时间限制:1 s 内存限制:32 MB [问题描述] K- 联赛职业足球俱乐部的球迷们都是有组织的训练有 ...

  2. 【LGR-059】洛谷7月月赛题解

    传送门 比赛的时候正在大巴上,笔记本没网又没电(不过就算有我估计也不会打就是了) \(A\) 咕咕 const int N=(1<<10)+5; int a[N][N],n; void s ...

  3. 1820:【00NOIP提高组】进制转换

    #include<bits/stdc++.h>//十分简单(滑稽)的一道模拟题 using namespace std; ]={'A','B','C','D','E','F','G','H ...

  4. 详解DLX及其应用

    什么是DLX? 让我们看看百度百科上的解释:在 计算机科学 中, Dancing Links ,舞蹈链, 也叫 DLX, 是由 Donald Knuth 提出的数据结构,目的是快速实现他的 X算法.X ...

  5. Arts打卡第7周

    Algorithm.主要是为了编程训练和学习. 每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard). 进行编程训练,如果不训练你看再多的算法书,你依然不 ...

  6. 关于Kernel的思考

    学习播客_KLDA(推导得很通俗,下面的推导就是源于此篇博客) 第一部分:按照自己的理解,模仿抄!学习播客来完成一下KLDA的推导. 第二部分:对于Kernel的思考 KLDA:顾名思义,就是把Ker ...

  7. Java List 和 Array 转化

    List to Array List 提供了toArray的接口,所以可以直接调用转为object型数组 List<String> list = new ArrayList<Stri ...

  8. 猎豹网校C++ Primer学习笔记

    1.头文件(15th课) 大型项目开发,要有很多头文件.只能写声明,不能定义(类定义和常量定义可以). 自己新建头文件(类定义,外部变量声明,函数声明).源文件包含对应的头文件. 头文件里写类的声明, ...

  9. leetcode 143. Reorder List 、86. Partition List

    143. Reorder List https://www.cnblogs.com/grandyang/p/4254860.html 先将list的前半段和后半段分开,然后后半段进行逆序,然后再连接 ...

  10. [Java复习] 分布式PRC - Dubbo

    分布式RPC框架 dubbo常见问题: 1. 问dubbo的工作原理:服务注册,注册中心,服务生产者,消费者,代理通信,负载均衡 2. 问网络通信,序列化: dubbo协议,长连接,NIO,hessi ...