打开文件

f=open("我的文件.txt","r",encoding="utf8")  #打开一个文件(读模式)
f.close() #关闭文件

解释:

  • 参数1:文件路径和文件名
  • 参数2:打开模式,r表示read读
  • encoding指定文件编码为UTF-8
  • 最后不要忘记关闭文件

with语句

写代码过程中,很容易忘记关闭文件,所以出现了with语句

with open("我的文件.txt","r",encoding="utf8") as file:  #自动关闭文件
data=file.read() #读取文件
print(data)

解释:

  • 这种方式会自动关闭文件(防止忘记)
  • 一旦离开了with语句块,就会自动关闭文件
  • 操作文件的对象为变量file
同时打开多个文件:
with open("123.txt","w") as f1,open("456.txt","w") as f2:
f1.write("Hello 123.txt\n")
f2.write("Hello 456.txt\n")

读写模式

什么是光标?

操作系统使用光标来读写文件
光标的位置影响读写的位置

常用模式
r	#读模式
w #写模式,会清空文件
a #追加模式 r+读写模式:
根据光标位置读写 w+写读模式:
会清空文件
根据光标位置读写 a+追加模式:
不会清空文件
打开文件之后自动将光标置于最后,而光标位置只会影响读操作
每一次追加都会将光标置于最后 rb、wb、ab……:
以bytes类型读取文件

示例:

下例中的读写模式为r (read读模式)

f=open("我的文件.txt","r",encoding="utf8")

读操作

方法:

data = file.read()   # 读取文件全部信息(不建议,非常占用内存)
data = file.read(5) # 读取5个字符

示例:

with open("我的文件.txt","r",encoding="utf8") as file:
data = file.read() # 读取文件全部信息(不建议,非常占用内存)
print(data) # 输出文件内容

写操作

示例:

with open("我的文件.txt","w",encoding="utf8") as file:
file.write("Hello World") # 写操作(只是写到缓冲区中)
file.flush() # 将缓冲区里的内容写到文件中

解释:

w模式会清空文件
write()函数会将数据写入缓冲区,而不是文件中
flush()函数和关闭文件时,python会将缓冲区中的数据写入文件。

为什么不直接写入文件?

文件存储在磁盘中,如果每一次写入文件都要访问一次磁盘,就会频繁请求磁盘,导致磁盘压力过大。


内置函数

with open("我的文件.txt","r",encoding="utf8") as file:
data=file.readline() #输出当前行(光标会移动到下一行)
data=file.readlines() #返回一个列表,元素为各行(不使用迭代器)
location=file.tell() #返回当前光标位置。按字节返回(一个中文占3个字节)
file.seek(5) #设置光标位置 num=file.fileno() #返回文件句柄,唯一标识该文件对象
#两个程序对同一个文件同时调用,得到的句柄相同
print(num)

重点:

  • readlines()会读取文件所有内容,如果文件很大则占用内存。
  • 所以大文件不建议使用readlines()
truncate()截断
num=file.truncate() #截断,删除光标后所有字符,返回光标位置
file.truncate(5) #保留文件开头5个字符,剩下的删除

示例:

with open("我的文件.txt","w",encoding="utf8") as file:
file.write("1234567890")
file.flush()
file.seek(5)
num=file.truncate() #文件内容为12345
print(num) #结果为5

遍历文件

with open(“我的文件.txt”,“r”,encoding=“utf8”) as file:
for i in file:
print(i) # 使用生成器,不占用内存(所以不要使用readlines()方法)

解释器:

  • 遍历文件:依次读取文件全部内容(这里按行读取)
  • 生成器:每一行依次读取到内存中,而不是全部读取到内存中
  • 不建议使用realines(),特别是读取大文件

将变量值保存在文件中

如何将变量值写入文件中?

  • 思路:

将变量转换为字符串,再写入文件
读取文件后,再将字符串转换为原类型

方法1:eval方式

eval函数可以将字符串类型的数据转换为原来的类型。
如:将字符串'{"姓名":"张三"}'转换为字典{"姓名":"张三"}

示例:

a={'湖南':{'永州':'宁远'}}
a=str(a) #将a强制转换成字符串(就可以方便写入文件中了)
print(type(a)) #输出:<class 'str'>
a=eval(a) #读取文件后,将a转换回原来的类型
print(type(a)) #输出:<class 'dict'>
方法2:json方式
import json
a={'江苏':{'镇江':'京口区'}}
data=json.dumps(a) #转换成json格式 (str类型)
data=json.loads(data) #转回原格式

解释:

  • json方式缺点:不可转换对象
  • json方式优点:语言之间通用(可被其他语言解析)
方法3:pickle方式
import pickle
a={'江苏':{'镇江':'京口区'}}
data=pickle.dumps(a) #转换成pickle格式 (str类型)
data=pickle.loads(data) #转回原格式

解释:

  • pickle方式优点:可以转换所有类型
  • pickle方式缺点:只能在Python中使用
  • 注意:要用rb和wb方式读写文件,因为pickle会将变量转换为bytes类型

04-Python文件操作的更多相关文章

  1. Python基础篇【第2篇】: Python文件操作

    Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...

  2. [Python学习笔记][第七章Python文件操作]

    2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...

  3. Python文件操作与函数目录

    文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 ...

  4. 初学Python——文件操作第二篇

    前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...

  5. day8.python文件操作

    打开和关闭文件 open函数 用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file = open(file_name [, access_ ...

  6. 关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()

    嗯.最近在弄的东西也跟这个有关系,由于c基础渣渣.现在基本上都忘记得差不多的情况下,是需要花点功夫才能弄明白. 每个语言都有相关的文件操作. 今天在flask 的例子里看到这样一句话.拉开了文件操作折 ...

  7. Python之路Python文件操作

    Python之路Python文件操作 一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r&qu ...

  8. python 文件操作 r w a

    python基础-文件操作   一.文件操作 对文件操作的流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件       打开文件时,需要指定文件路径和以何等方式打开文件, ...

  9. Python:文件操作技巧(File operation)(转)

    Python:文件操作技巧(File operation) 读写文件 # ! /usr/bin/python #  -*- coding: utf8 -*- spath = " D:/dow ...

  10. 小学生都能学会的python(文件操作)

    小学生都能学会的python(文件操作) 1. open("文件路径", mode="模式", encoding="编码") 文件的路径: ...

随机推荐

  1. [Contract] Solidity 合约发布到测试网 ropsten 的作用

    当我们本地完成了一系列测试以后,接下来就是准备上线了. 关于合约部署可以参考这篇:Solidity 合约使用 truffle 部署到测试网和主网 你可能有一个疑问,在上主网之前,先上测试网的作用是什么 ...

  2. 2019-8-31-C#-大端小端转换

    title author date CreateTime categories C# 大端小端转换 lindexi 2019-08-31 16:55:58 +0800 2018-05-28 10:21 ...

  3. Etcd 可视化管理工具,GUI 客户端。

    Etcd Assistant--Etcd 可视化管理工具,GUI 客户端. 下载地址:http://www.redisant.cn/etcd 主要功能: 支持多标签页,同时连接到多个集群 以漂亮的格式 ...

  4. 一文搞懂drag&drop浏览器拖放功能的实现

    拖放功能,即将一个元素从一个区域,通过拖拽,放置到另一个区域.常见的应用是将文件或图片从一个区域,拖放到另一个区域.中文常常把这表述成拖拽,实际上拖拽的描述并不准确,应该叫拖放,因为drag事件和dr ...

  5. All in One:Prometheus 多实例数据统一管理最佳实践

    01 引言 Prometheus 作为目前最主流的可观测开源项目之一,已经成为云原生监控的事实标准,被众多企业广泛应用.在使用 Prometheus 的时候,我们经常会遇到全局视图的需求,但是数据确分 ...

  6. 04.2 go-admin前后端打包为一个服务上线

    目录 一.思路: 二.打包go-admin-ui为静态文件 a.修改配置文件 b.打包 c.复制dist到go-admin的static目录里 三.配置go-admin a.配置路由 b.访问页面 视 ...

  7. C语言:约瑟夫问题——使用循环链表解决

    传说有30个乘客同乘一条船,因为严重超载,加上风浪水作,危险万分.船长告诉乘客,只有将全船一半的乘客投入海 中,其余人才能幸免于难.他们约定了一个规则:30个人围成一圈,由第一个人数起,依次报数,数到 ...

  8. JDK源码阅读-------自学笔记(十七)(java.io.File类)

    File类简介 java.io.File类:抽象代表文件和目录. 使用此类,相当于获取了系统的文件,可以对其进行操作. 在开发中,读取文件.生成文件.删除文件.修改文件的属性时经常会用到本类 File ...

  9. 【0day漏洞复现】北京慧飒科技有限责任公司WEB VIDEO PLATFORM存在未授权访问漏洞

    阅读须知 花果山的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站.服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作.利用此 ...

  10. 用STM32F4的DMA实现高速、实时的同步并行通信——以读取高速ADC为例[原创www.cnblogs.com/helesheng]

    大概6-7年前,在网上看到过一篇用STM32F1的DMA控制GPIO输出高速数字波形的帖子.觉得很有意思,就自己试了试:控制GPIO输出波形翻转的速度最高只能达到3-4MHz,且容易受到STM32F1 ...