Python学习笔记(七)文件

Python新手入门笔记(一) #与Python的第一次亲密接触 1. 阅读详情

“Life is short, You need Python” – Bruce Eckel

Environment

  • OS: macOS Mojave
  • Python version: 3.7
  • IDE: Jupyter Notebook



0. 写在前面

本文记录一些 Python 打开关闭文件的基本方式和读取写入的方法,主要以文本文件为例。而在实际操作中,更多的会使用第三方库(如Pandas 中 Series 和 DataFrame 对象的方法;open-cv 或 PIL 的函数)对结构化数据或图片数据进行读取或保存。

1. 文件的打开和关闭

要对文件内容进行操作,首先需要使用 open 函数打开文件,得到文件指针;要对写入的内容进行保存,需要关闭文件,调用文件指针的 close 方法。

1.1 打开文件

在 .py 文件同目录下放一个 zen.txt 文件,内容如下
在这里插入图片描述

  • open(file='文件路径', mode='打开模式', encoding='操作文件的字符编码') 返回文件对象 f 。当文件与当前的 Python 文件在同一目录,则可以直接对 file 传入文件名。
  • f.close() 调用方法关闭文件

例

# 非绝对路径时,会在 Python 同目录下寻找该文件
f = open('zen.txt', 'r', encoding='utf-8')

f.read()
# 'Beautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.\nFlat is better than nested.\nSparse is better than dense.'

f.close()

1.2 关闭文件

如上所述,在对文件操作完成后,需要调用 f.close() 关闭文件,这样才会将修改写入硬盘。注意,由于 Python 有垃圾回收机制,在文件指针对象的引用数为零时将其销毁,所以不会造成内存泄露。

Alternatively,更常用 with 加缩进的结构,可以不用调用 close ,在 with 结构运行结束之后文件将自动关闭

with open('文件路径', '打开模式', encoding='操作文件的字符编码') as f:
	对文件进行的操作

例

with open('zen.txt', 'r', encoding='utf-8') as f:
    f.read()
# 'Beautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.\nFlat is better than nested.\nSparse is better than dense.'

1.2 打开的模式

open 函数中的 mode 参数传入的值将确定读写模式和文件类型

读写模式打开模式注
‘r’只读默认。若文件不存在则报错 ;文件指针在开头
‘r+’读写若文件不存在则报错;文件指针在开头,写入多少覆盖多少原有的内容
‘w’只写创建新文件,若存在同名文件则以空白文件覆盖之(危)
‘w+’读写(同上)
‘x’只写创建新文件;若文件已存在则报错
‘a’只写若文件不存在则创建空白文件;若文件已存在则打开文件,指针在末尾,实现追加写入内容
‘a+’读写(同上)

注:默认为文本格式(‘t’),如 mode='w+' 就是 mode='wt+';若需要以二进制格式打开,则传入参数加上 ‘b’,如 mode='rb+',这时不传入 encoding。

例 将爬取的图片写入到硬盘

# 爬取的图片使用变量 img 引用,那么
with open('Lenna.jpg', 'wb') as f:
	f.write(img)

1.3 编码问题

个人遇到过使用 Pandas 打开 csv 文件编码错误的情况,编码问题有时候是比较麻烦的问题,解决办法就是查查资料,然后试试传入各种 encoding 参数 ╯▽╰ 详细的编码查看官网的Python标准编码。

内置函数 open 函数中的 encoding 参数传入的值将文件的字符编码,当处理文本文件时,建议应该显式地传入 encoding 参数,清楚地指示文件的编码。

Python 3.x 默认使用 ‘UTF-8’ 编码,使用 locale 库的 getpreferredencoding 函数能够获得当前默认编码

import locale

locale.getpreferredencoding() # 'UTF-8'

2. 文件读写的方法

关于文件对象的方法,传入的参数基本都为“仅位置参数”(参考Python基础(五)函数的2.3)。

2.1 文件指针

查了一些资料,都显示 open 函数返回的是一个“文件对象”,在 Python 中使用 type 函数查看这个返回值,为如下结果

# 以文本模式打开时
f = open('zen.txt', 'r', encoding='utf-8')
print(type(f)) # _io.TextIOWrapper
f.close()

# 以二进制模式打开时
f = open('zen.txt', 'rb')
print(type(f)) # _io.BufferedReader 
f.close()

个人认为可以理解为一个文件指针对象,因为读写操作都是从这个位置开始的,并且有如下方法

  • f.tell() 返回文件指针当前的位置
with open('zen.txt', 'r', encoding='utf-8') as f:
    print('Position of pointer in the beginning:', f.tell())
    content = f.read(6)
    print('Position of pointer now:', f.tell())
# Position of pointer in the beginning: 0
# Position of pointer now: 6
  • f.seek(cookie, whence=0, /) 从 whence 位置(对 whence 传入0 为开始(默认),1 位当前位置,2 位末尾)开始,偏移 cookie 个字符位置。注意,只有当以二进制模式打开文件时,才可以对 whence 传入 1 或 2。返回指针的新位置。
with open('zen.txt', 'rb') as f:
    print('Position of pointer in the beginning:', f.tell())
    f.seek(11, 1)
    print('Position of pointer now:', f.tell())
  • f.truncate(pos=None, /) 从文件的第一个字符开始,到之后的 pos 位置为止,截取这些内容保留,之后的内容全部删除。默认传入 None,全部截断,情况内容。返回保留的内容的长度,即传入的 pos
with open('zen.txt', 'r+') as f:
    new_size = f.truncate(16)
    print(f.read())
# Beautiful is bet

print(new_size) # 16

2.2 读取的方法

注意,读取方法中参数 (size / hint)传入时直接传入数字,而不允许以关键字形式传入。

  • f.read(size=-1, /) 若传入负值(默认),则返回从文件指针当前位置到文件结束的所有内容,文件指针移动到文件结束位置;若传入正整数,则文件指针向后移动 size 个字符的位置,返回 size 个字符;若传入零,则文件指针位置不变,不读取字符
with open('zen.txt', 'r', encoding='utf-8') as f:
    print(f.read())
# Beautiful is better than ugly.
# Explicit is better than implicit.
# Simple is better than complex.
# Complex is better than complicated.
# Flat is better than nested.
# Sparse is better than dense.
  • f.readline(size=-1, /) 若传入负值(默认),则返回当前文件指针位置开始,到下一个换行符为止(包括换行符)的内容;若传入正整数,则文件指针向后移动,直到遇见了换行符或移动了 size 个字符为止,返回文件指针经过的内容;若传入零,则文件指针位置不变,不读取字符
with open('zen.txt', 'r', encoding='utf-8') as f:
    print(f.readline(2))
    print(f.readline(), end='')
# Be
# autiful is better than ugly.
  • f.readlines(hint=-1, /) 若传入负值或零,则返回一个列表,其中每个元素为文件中的每行,包含换行符;若传入正整数,文件指针当前位置开始,向后移动 hint 个字符的位置,再从这个位置(如果这个位置非换行符)开始,移动到下一个换行符为止。这些文件指针经过的内容,以每个换行符分开,作为列表的元素返回。
with open('zen.txt', 'r', encoding='utf-8') as f:
    print(f.readlines(31))
    print(f.readlines())
# ['Beautiful is better than ugly.\n', 'Explicit is better than implicit.\n']
# ['Simple is better than complex.\n', 'Complex is better than complicated.\n', 'Flat is better than nested.\n', 'Sparse is better than dense.']
  • 对文件指针对象进行迭代
with open('zen.txt', 'r', encoding='utf-8') as f:
    for row in f:
        print(row, end='')
# Beautiful is better than ugly.
# Explicit is better than implicit.
# Simple is better than complex.
# Complex is better than complicated.
# Flat is better than nested.
# Sparse is better than dense.

2.3 写入的方法

以这个列表为例

lines = [
    'Beautiful is better than ugly.\n', 
    'Explicit is better than implicit.\n', 
    'Simple is better than complex.\n', 
    'Complex is better than complicated.\n', 
    'Flat is better than nested.\n', 
    'Sparse is better than dense.'
]
text = ''
for line in lines:
    text += line
  • f.write(text, /) 将 text 写入文件,返回写入的字符数
with open('zen.txt', 'w', encoding='utf-8') as f:
    f.write(text)
# 188
  • f.writelines(lines) 返回 None。传入一个可迭代序列对象,注意如需换行,要加上换行符
with open('zen.txt', 'w', encoding='utf-8') as f:
    f.writelines(lines)
Python实验三函数与文件操作 1)编写函数,传入一个由实数元素构成的列表,返回一个字典,字典内容为{‘max’:最大值,‘min’:最小值,‘ave’:平均值,‘std’:样本标准方差}。其中样本标准方差的计算公式为: def fun(list): all=0 ave=0 max=0 min=-1 n=0 for i in list: all+=i ave+=1 if(min>i or min==-1): min=i if(max<i): max=i ave=all/ave fo 阅读详情

相关推荐

生态学家都在用的MixSIAR:用R语言搞定稳定同位素混合模型(从数据整理到结果解读)

本文详细介绍了生态学家常用的MixSIAR工具,通过R语言实现稳定同位素混合模型分析,从数据整理到结果解读全流程。文章涵盖环境准备、模型构建、参数设置、运行诊断及可视化等关键步骤,帮助研究者科学分析河口鱼类食物来源,适用于生态学研究和湿地保护政策制定。

weixin_28683065的博客 437

Python基础学习:文件读取

文件读取: 常用的文件读取方法: file = open('thefile.txt') 读文件 file = open('thefile.txt', 'w') 写文件 每次通过w模式打开文件 以前文件内容会全部清空 content = file.read() 读取所有内容 content_part = file.read(100) 读取固定字节 content_oneline = file.readline() 读取一行内容 content_all = file.readlines() file.

狂浪生 712

LabVIEW多设备采集实战:1个程序同时控制3个RS485 Modbus仪表

本文详细介绍了如何使用LabVIEW实现多设备RS485 Modbus同步采集,涵盖硬件架构设计、多线程通信框架搭建、数据帧解析技巧及性能优化策略。通过实际项目案例,展示如何解决端口冲突、数据解析错误等工业自动化常见问题,提升采集系统实时性与可靠性。

qsc901234的博客 302

python实验3:函数和文件操作

1)编写函数,传入一个由实数元素构成的列表,返回一个字典,字典内容为{‘max’:最大值,‘min’:最小值,‘ave’:平均值,‘std’:样本标准方差}。其中样本标准方差的计算公式为:2)输入一串字符作为密码,密码只能由数字与字母组成。编写一个函数judge(password),用来求出密码的强度level,根据输入,输出对应密码强度。密码强度判断准则如下(满足其中一条,密码强度增加一级):①有数字;②有大写字母;③有小写字母;④位数不少于8位。

2201_75813676的博客 3310

奇迹mu服务端DATA文件解析:从基础配置到高级玩法

本文深入解析奇迹MU服务端DATA文件的核心配置与高级玩法,涵盖基础设置、怪物AI系统、技能战斗机制、副本事件管理及物品商城定制。通过详细示例和实用技巧,帮助开发者掌握从经验倍率调整到动态事件触发的全方位配置方法,实现个性化的私服搭建与运营。

weixin_29254673的博客 530

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

宁波阿成的博客 660

python学习笔记(参数收集、私有方法或属性,继承,异常)

参数收集 在参数前加一个*,前面有*参数将被放进元组中: >>> def print_params_test(title, *params): ... print(title) ... print(params) ... >>> print_params_test('test:',1,2,3) test: (1, 2, 3) 注:*的参数不一定要放在最后,如果不放在最后,后续的赋值需要指定参数。 >>> def test(x, *

leeyns的博客 213

华为OD机试真题 新系统 9月16号 【统计特殊数字】

华为OD新系统机试真题【统计特殊数字】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【统计特殊数字】。

qq_45776114的博客 769

python学习笔记七(文件)

通过掌握这些文件操作和异常处理技术,你可以构建更健壮、更可靠的Python应用程序。

wsys_yysn的博客 989

MOSFET雪崩特性参数解析

但是,一些电源在输出短路时,初级中会产生较大的电流,加上初级电感,器件就会有雪崩损坏的可能,因此在这样的应用条件下,就要考虑器件的雪崩能量。对于那些在MOSFET的D和S极产生较大电压的尖峰应用,就要考虑器件的雪崩能量,电压的尖峰所集中的能量主要由电感和电流所决定,因此对于反激的应用,MOSFET关断时会产生较大的电压尖峰。雪崩击穿能量标定了器件可以容忍的瞬时过冲电压的安全值,其依赖于雪崩击穿需要消散的能量。EAS单脉冲雪崩击穿能量, EAS标定了器件可以安全吸收反向雪崩击穿能量的高低。

Airer_00的博客 806

汽车行业OTD业务模式入门学习

本文是在学习彭俊松老师的《汽车行业整车订单交付系统》后,对于OTD理解的一些摘录,供诸位参考学习。

qq_40664711的博客 1万+

Python学习笔记七_文件读写

这篇博客来记录下python对文件的操作。 一、对文件的操作分为三步: 1、打开文件获取文件的句柄,句柄就理解为这个文件 2、通过文件句柄操作文件 3、关闭文件 现有文件file.txt 还记得 你说家是唯一的城堡 随着稻香河流继续奔跑 微微笑 小时候的梦我知道 二、文件的基本操作 python2和3都有open方法,python2中还可以用file()打开文...

deyunsi2684的博客 174

点云从入门到精通技术详解100篇-点云的特征检测(续)

对每个维度的序列分别计算 DTW 距离,最后。权重将距离限制在较小的范围内,对于时间跨度大的数据集,过度限制了点对点的路径,同的,因此不能用欧氏距离来计算两个多元时间序列之间的距离,本文选用的是动态时。到的股票数据是未知分类的,因此该数据的相似性分析缺少有效的评价方式,通常需要。时间序列,简而言之,就是与时间相关的数据的集合,应用在生活工作中的方方面。时间序列的分段线性化表示的难点在于如何找出分段点,目前,对于分段点的研究。经过分段线性化之后,每个多元时间序列的维度是相同的,但是每一维的长度是不。

getusushu的博客 334

python学习笔记(七)—— 文件读写

使用open()函数打开文件,参数传要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件。 文件不与程序文件位于相同目录下的时候,需要提供文件路径.linux系统下文件路径使用用斜杠/,windows下使用反斜杠\。 #关键字with在不再需要访问文件后将其关闭 with open('pi_digits.txt') as file_object: #read()方法读取文件的全部内容 contents = file_object.read() print(contents)

fighting_jun的博客 427

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python学习笔记(七)文件、异常和模块

python学习笔记(七)文件、异常和模块

qq_52309893的博客 765

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Python学习笔记(七)文件和数据格式化

Python学习笔记(七)文件和数据格式化一、文件的使用(1)文件的类型(2)文本文件(3)二进制文件(4)文件的打开和关闭(5)文件内容读取(6)数据的文件写入二、自动轨迹绘制(1)问题分析(2)基本思路(3)代码 一、文件的使用 (1)文件的类型 文件是数据的抽象和集合 文件式存储在辅助存储器上的数据序列 文件是数据存储的一种形式 文件展现形态:文本文件和二进制文件 文本文件和二进制文件只...

嘘嘘的小粥 936

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Python学习笔记七:文件操作

文件操作 对照一个word文件的操作方式,来体会文件操作的内容 打开文件:f=open(“file”),提示编码错误,windows默认是GBK f=open(“file”,encoding=”utf-8) 输出全部内容:print(f.read()) 文件打开模式:默认为”r”,只读;”w”,写,创建新文件写,原文件内容被覆盖; “a”,append,附加在文件最后 读、写...

dengtaipian0480的博客 130

Python学习笔记(七)——文件和目录操作

目录和文件操作   语言只有和外部连起来操作才会实现更强大的功能,比如操作文件、数据库等,这样数据可以有一块单独存储的地方,而不是存放在内存中。更强大的是网络编程,当然这些后续都会学习。接下来学习python对目录和文件的操作。前面的笔记都是基础理论知识,我觉得从这里开始几乎就可以干一些事了。   有关文件夹与文件的查找,删除等功能 在os模块中实现。使用时需先导入这个模块:import os               目录 1、取得当前目录——os.getc...

繁星流动天际 365

Python学习笔记(七):元组、文件及其他类型

以Mark Lutz著的《Python学习手册》为教程,每天花1个小时左右时间学习,争取两周完成。 --- 写在前面的话 2013-7-18 19:30 学习笔记 1,与列表类似,元组也是任意对象的有序序列,通过偏移量读取,但是元组不可以改变。 2,由于圆括号也可以把表达式括起来,因此当元组中只有一个对象时,需要加一个逗号以避免歧义。例如: t = (1,)在不引起语法冲突的情

mathboylinlin的专栏 1875

python如何调用参数配置文件_【Python学习笔记七】从配置文件中读取参数

将一些需要经常更改的参数存放在配置文件中,通过读取配置文件来获取参数,这样修改以及使用起来比较方便1、首先是配置文件的写法,如下一个environment.ini文件:a:里面“[]”存放的是sectionb:每个section中可以用“=”、“:”来为key赋值valuec:一个文件中可以有多个section2、接下来是读取的方法,通过congfigparser来读取指定文件,具体可以看下面代码...

weixin_39610724的博客 401

python读取配置参数,【Python学习笔记七】从配置文件中读取参数

将一些需要经常更改的参数存放在配置文件中,通过读取配置文件来获取参数,这样修改以及使用起来比较方便1、首先是配置文件的写法,如下一个environment.ini文件:a:里面“[]”存放的是sectionb:每个section中可以用“=”、“:”来为key赋值valuec:一个文件中可以有多个section2、接下来是读取的方法,通过congfigparser来读取指定文件,具体可以看下面代码...

weixin_26704349的博客 1119

python cookbook第三版学习笔记七:python解析csv,json,xml文件

CSV文件读取: Csv文件格式如下:分别有2行三列。 访问代码如下: f=open(r'E:\py_prj\test.csv','rb') f_csv=csv.reader(f) for f in f_csv: print f 在这里f是一个元组,为了访问某个字段,需要用索引来访问对应的值,如f[0]访问的是first,f[1]访问的是second,f[2]访...

dianjie9145的博客 177

Python学习笔记(七):Python 文件I/O

http://www.w3cschool.cc/python/python-files-io.html Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档。 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式。此函数把你传递的表达式转换成一个字符串表达式,并将结果写到标准输出如下

liushidexing的专栏 678

python目录和文件的基本操作_python学习笔记(七)——文件和目录操作

目录和文件操作语言只有和外部连起来操作才会实现更强大的功能,比如操作文件、数据库等,这样数据可以有一块单独存储的地方,而不是存放在内存中。更强大的是网络编程,当然这些后续都会学习。接下来学习python对目录和文件的操作。前面的笔记都是基础理论知识,我觉得从这里开始几乎就可以干一些事了。有关文件夹与文件的查找,删除等功能 在os模块中实现。使用时需先导入这个模块:import os目录1、取得当...

weixin_39955351的博客 202

python学习笔记(七):持久化存储文件管理

持久化存储文件管理一.文件操作1.文件的打开2.file对象的属性3.file对象的常用方法4.文件的关闭5.with语句工作原理二.os模块1.系统信息2.路径3.文件处理4.文件批处理三.json模块1.python类型数据和JSON数据格式互相转换规则2.序列化及反序列化常用参数三.自定义复杂数据类型编码 一.文件操作 文件的作用: 一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,“哭都没地方哭了”。默认数据是加载到内存中,结果也是保存到内存中

鱼子酱 176
上一篇: Python学习笔记(六)类和对象
下一篇: Python学习笔记(八)异常
longrootchen
博客等级 码龄7年 19粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值