IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 零基础学python编程思维(四) | 读写文件 -> 正文阅读

[Python知识库]零基础学python编程思维(四) | 读写文件

这一部分的总结没有按照Datawhale的【PythonThinking】课程来,主要参考了这篇blog

以下为正文内容:

打开文件

用python打开文件时,r表示以只读方式打开文件,文件的指针将会放在文件的开头(这是默认模式),若文件不存在则报错:

f = open(r"C:\Users\Wings\.spyder-py3\故意杀人.txt", "r", encoding="utf-8")
data = f.read()
print(data[:235])

当再次执行上述代码时,python并不会打印出同样的结果:

data1 = f.read()
print(data1[:235])   #再次执行时就不再显示读取结果

这是因为操作这个“文件句柄”的read()方法去读取文件时,句柄会从文件的开头位置移动到文件的结束位置,如果不做任何操作,读取完毕后句柄就会停止在结束位置。因此再次读取文件时,该句柄是从结束位置往后面读取内容,由于后面没有任何内容,因此第二次读取为空。

写入文件

w表示打开一个文件只用于写入,如果该文件不存在,创建新文件;如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被覆盖:

f = open(r"C:\Users\Wings\.spyder-py3\read0.txt", "w", encoding="utf-8")
f.write("加一颗奶球")
#此时打开该文件,并不会看到相应文本内容
f.close()     #现在文档中才会出现内容

r+模式

r+表示打开一个文件用于读写,当文件不存在时报错,文件指针将会放在文件的开头,写入内容后文件句柄放在写入内容的最后面。

#只读取文件内容
f = open(r"C:\Users\Wings\.spyder-py3\read0.txt", "r+", encoding="utf-8")
data = f.read()
print(data)
f.close()

#在文件中写入内容后立即读取
f = open(r"C:\Users\Wings\.spyder-py3\read0.txt", "r+", encoding="utf-8")
f.write("抬头看见星星在唱歌")
data = f.read()
print(data)     #无法显示内容
f.close()

#在文件中写入内容并调整句柄位置后,再读取
f = open(r"C:\Users\Wings\.spyder-py3\read0.txt", "r+", encoding="utf-8")
f.write("李四躲猫猫")
f.seek(0)     #将句柄由内容末尾调整到内容开头
data = f.read()
print(data)   #此时输出内容为"李四躲猫猫星在唱歌"
f.close()

w+模式

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

#直接在文件中写入内容
f = open(r"C:\Users\Wings\.spyder-py3\read1.txt", "w+", encoding="utf-8")
f.write("啊咧啊咧")
f.close()
       
#直接读取上述内容
f = open(r"C:\Users\Wings\.spyder-py3\read1.txt", "w+", encoding="utf-8")
data = f.read()
print(data)  #什么都读取不到
#因为w+在进行文件读取时默认先写再读,但由于没有写入,系统默认写入空值覆盖掉了原有内容
f.close()    #此时打开文档查看,里面确实没有任何东西

#写入内容后立即读取
f = open(r"C:\Users\Wings\.spyder-py3\read1.txt", "w+", encoding="utf-8")
f.write("我顶着大太阳,只想为你撑伞")
#如果此时直接进行读取,读取不到内容,因为写入内容后句柄移动到了内容最后
f.seek(0)       #需要调整句柄位置再读取
data = f.read()
print(data)
f.close()

a+模式

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

#直接在文件中写入内容
f = open(r"C:\Users\Wings\.spyder-py3\read1.txt", "a+", encoding="utf-8")
f.write("咬一口热恋冰淇淋,牵你手漫步夏夜里")
f.close()

#读取文件内容
f = open(r"C:\Users\Wings\.spyder-py3\read1.txt", "a+", encoding="utf-8")
f.seek(0)    #调整句柄位置,再读取文件内容
data = f.read()
print(data)  #我顶着大太阳,只想为你撑伞咬一口热恋冰淇淋,牵你手漫步夏夜里
f.close()

read、readline与readlines

##read的使用
f = open(r"C:\Users\Wings\.spyder-py3\故意杀人.txt", "r", encoding="utf-8")
data = f.read()
print(type(data))   #<class 'str'>
print(data)
f.close()


##readline的使用
f = open(r"C:\Users\Wings\.spyder-py3\故意杀人.txt", "r", encoding="utf-8")
for i in range(3):
    data = f.readline()
    print(data)
f.close()

f = open(r"C:\Users\Wings\.spyder-py3\故意杀人.txt", "r", encoding="utf-8")
for i in range(3):
    data = f.readline().strip()  #去掉每一行末尾的换行符
    print(data)   #此时显示结果行与行之间没有空格
f.close()


##readlines的使用
f = open(r"C:\Users\Wings\.spyder-py3\故意杀人.txt", "r", encoding="utf-8")
data = f.readlines()
print(type(data))  #<class 'list'>
print(data)
f.close()

高效读取大型文件

使用for循环迭代f中的元素,每循环一次就读取一行到内存中,并记住这一次读取到的位置。进行下次迭代时,上一次所读取的内容就会被销毁,当前读取的就是第二行的内容,即每次内存中保留的只有当前循环得到的内容。

f = open(r"C:\Users\Wings\.spyder-py3\故意杀人.txt", "r", encoding="utf-8")
for line in f:
    print(line.strip())
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-24 15:14:36  更:2022-02-24 15:15:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:19:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码