Python 文件读写操作-Python零基础入门教程

目录

零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门

Python 除了通过 print 函数将数据输出到控制台,也可以通过读 / 写文件的方式读取 / 输出到磁盘文件中,文件读写简称 I / O 操作。Python 文件 I / O 操作一共分为四部分:

  • 打开(open)
  • 读取(read)
  • 写入(write)
  • 关闭(close)

一.Python 文件的打开 open

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

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

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

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

二.Python 文件的关闭 close

文件在打开读写之后记得要有关闭操作,就好比蹲完坑得擦屁股,关闭文件使用 close 函数。

注意:文件关闭之后,不能在继续对文件读写操作,如果需要读写操作需要重新 open 打开文件。

close() # 关闭文件

三.Python 文件的读取 read

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

1.read 函数

'''
参数:
     count - 表示需要读取的文字长度, conut 是缺省参数,如果没有设置 count 值,默认读取整个文件所有内容,该函数返回读取到的内容;

返回值:返回读取到的内容; 文件读取返回的内容并非字符串 str 类型,而是字节类型 bytes 类型,'b' 前缀代表的就是 bytes .
'''

read( [count] )

2.readline 函数

//读取文件一行数据,返回读取的内容

readline()

3.readlines 函数

//读取文件的所有行内容,返回读取的所有内容,注意:返回的数据类型是列表,列表中每个数据都是文件中的一行数据

readlines()

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

如果想将 bytes 类型转为字符串直接使用 bytes.decode 方法即可,decode 方法默认使用 UTF-8 编码;假如 d:/1.txt 中的内容如下:

@Blog(个人博客地址): www.codersrc.com
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

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

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 文件读写操作.py
@Time:2021/04/17 10:00
@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): www.codersrc.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(个人博客地址): www.codersrc.com
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

************************************************************
方法二:使用 readline() 函数读取txt内容

@Blog(个人博客地址): www.codersrc.com
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!


************************************************************
方法三:使用 readlines() 函数读取txt内容

@Blog(个人博客地址): www.codersrc.com
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
'''

四.Python 文件的写入 write

1.write 函数语法

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

//直接传入 bytes 类型的字符即可,'b' 前缀代表的就是bytes.

write( [bytes] )

2.write 函数使用案例

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 文件读写操作.py
@Time:2021/04/17 10:00
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

"""


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’ ,每次写入文件都会覆盖上一次的内容,即写入之前的内容会被清空;

五.Python 文件偏移 seek

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

1.seek 函数

'''
参数:
     offset - 表示相对whence 偏移多少个字节;
     whence - 表示偏移的位置,0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起;

'''

seek([offset],[whence])

2.tell 函数

// 相对于文件开始位置,当前偏移的字节数

seek([offset],[whence])

小窍门:tell 函数也可以用来计算整个文件的 bytes 长度;

3.seek / tell 函数示例代码

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 文件读写操作.py
@Time:2021/04/17 10:00
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!

"""

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.codersrc.com
68
python教程 - 猿说python : 第二行数据 www.codersrc.com
136
'''

注意:一般只要调用 read / readline / readlines / write 等函数,文件指针会自动发生偏移。

六.重点总结

  • 1.read 函数可以设置读取指定的长度,例如:只读取 10 个字符 read(10);
  • 2.readlines 返回值是列表 list,并非 bytes 类型,而列表中的每一个元素都是文件中的一行数据,类型是 bytes 类型;
  • 3.如果文件读取的内容含有中文,需要通过函数 decode 方法解码转为字符串,decode 方法默认为 UTF-8 解码;
  • 4.文件 open 之后记得 close ,养成良好的书写习惯;

七.猜你喜欢

  1. Python for 循环
  2. Python 字符串
  3. Python 列表 list
  4. Python 元组 tuple
  5. Python 字典 dict
  6. Python 条件推导式
  7. Python 列表推导式
  8. Python 字典推导式
  9. Python 函数声明和调用
  10. Python 不定长参数 *argc/**kargcs
  11. Python 匿名函数 lambda
  12. Python return 逻辑判断表达式
  13. Python 字符串/列表/元组/字典之间的相互转换
  14. Python 局部变量和全局变量
  15. Python type 函数和 isinstance 函数区别
  16. Python is 和 == 区别
  17. Python 可变数据类型和不可变数据类型
  18. Python 浅拷贝和深拷贝

未经允许不得转载:猿说编程 » Python 文件读写操作

本文由博客 - 猿说编程 猿说编程 发布!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容