Python基础—文件操作

简介: Python基础—文件操作文件操作文件是指为了重复使用或长期使用的目的,以文本或二进制形式存放于外部存储器(硬盘、U盘、光盘等)中的数据保存形式,文件是信息交换的重要途径,也是利用程序解决实际问题的重要媒介。

Python基础—文件操作

文件操作

文件是指为了重复使用或长期使用的目的,以文本或二进制形式存放于外部存储器(硬盘、U盘、光盘等)中的数据保存形式,文件是信息交换的重要途径,也是利用程序解决实际问题的重要媒介。


程序对数据读取和处理都是在内存中进行的,程序设计结束或关闭后,内存中的这些数据也会随之消失。计算机文件可以将数据长期存储下来反复使用,不会因程序结束或断电而消失。


程序可以随时读取文件里的全部或部分数据,数据的处理结果写入文件后,可以长期保存,供其他程序的应用随时读取和处理。而且,文件的使用,还可以消除计算机内存对数据体积的限制,可以处理远超过内存大小的数据量。


本章和下一章节将详细讲授利用程序创建、打开与关闭文件的方法,通过案例讲授文本文件、CSV格式文件和JSON格式文件的读写操作,以及利用numpy和pandas库读取文件中的数据并对数据分进分析与统计的方法。


文件


为了长期保存、重复使用

以文本或二进制形式

存放于外部存储器中的数据保存形式


二进制文件


数据以二进制的形式存储

需要特定的应用软件打开和运行

图片文件(jpeg)、视频文件(mpeg)、

Windows下的可执行文件(exe)

5.1.png

文本文件

中西文字符、数字、标点等符号

文本编辑器打开,可直接阅读

文本文件(txt)、逗号分隔值(csv)、

日志文件(log)、配置文件(ini)等

CR:Carriage Return,\r,回车

LF:Linefeed,\n,换行

5.2.png

文件操作

文件的打开:


将文件以文本形式或二进制形式打开

用于读或写操作

open(file, mode=‘r’, encoding=None)


file 参数是一个带路径的文件名,字符串

open(file, mode=‘r’, encoding=None)

f = open(‘D:\test\temp.txt’)

f = open(‘./data/temp.txt’)

相对路径是相对当前打开文件位置的路径

f = open(‘temp.txt’)

文件与程序在相同文件夹下时可不加路径

绝对路径是从根目录开始的完整路径


mode 可选参数,指定文件打开的方式和类型

缺省时使用默认值’r’,以只读方式打开

open(file, mode=‘r’, encoding=None)

f = open(‘temp.txt’)

f = open(‘temp.txt’, ‘r’)


open(file, mode=‘r’, encoding=None)

f = open(‘temp.txt’, ‘w’)

'w’以写数据模式打开文件

若文件已存在,先清除该文件中所有内容

若文件不存在,先创建该文件再打开


open(file, mode=‘r’, encoding=None)

f = open(‘temp.txt’, ‘a’)

'a’以追加写数据模式打开文件

若文件已存在,新数据追加在现有数据之后

若文件不存在,先创建文件后在打开


open(file, mode=‘r’, encoding=None)

f = open(‘temp.txt’, ‘x’)

'x’以创建文件写数据模式打开文件

若文件已存在,打开失败

避免误操作覆盖现有文件


open(file, mode=‘r’, encoding=None)

f = open(‘temp.txt’, ‘rt’)

't’以文本模式打开文件处理数据(默认模式)

f = open(‘temp.txt’, ‘rb’)

'b’以二进制模式打开文件处理数据


open(file, mode=‘r’, encoding=None)

f = open(‘temp.txt’, ‘r+’)

‘+‘打开文件并允许更新

相当于增加读或写模式

f = open(‘temp.txt’, ‘w+’)

f = open(‘temp.txt’, ‘a+’)

与’r’、‘w’ 或’a’ 组合使用

'r+'可读可写、'w+'可写可读、'a+'可追加写可读


文件的遍历


open(file, mode=‘r’, encoding=None)

返回一个可遍历的文件对象

可以遍历访问文件中的数据

每个循环获得文件中的一行数据

行末有一个换行符’\n’


f = open('静夜思.txt', 'r', encoding='utf-8')
for line in f:
print(line)

文件的遍历

open(file, mode=‘r’, encoding=None)

返回一个可遍历的文件对象

可以遍历访问文件中的数据

每个循环获得文件中的一行数据

行末有一个换行符’\n’

在这里插入代码片f = open('静夜思.txt', 'r', encoding='utf-8')
for line in f:
print(line.strip())

文件的关闭

f.close()

文件使用完毕必须关闭文件对象

以确保对文件中数据的所有改变都写回到文件中

释放文件的读写权限,使其他程序可以操作该文件

f = open('静夜思.txt', 'r', encoding='utf-8')
for line in f:
print(line.strip())
f.close()

文件的关闭

f.close()

忘记关闭文件或程序在执行f.close()语句之前遇到错误,

导致文件不能正常关闭

f = open('静夜思.txt', 'r', encoding='utf-8')
for line in f:
print(line.strip())
f.write('杜甫') # 无写权限,操作将失败
f.close() 
# 程序未关闭时,文件一直处于打开状态

文件的关闭-异常处理

import io
try:
f = open('8.1 静夜思.txt', 'r', encoding='utf-8')
for line in f:  
print(line.strip()) 
f.write('杜甫')        
except io.UnsupportedOperation:
print('缺少写权限')
finally:
f.close()   # 无论是否异常语句都会执行

上下文管理器

文件打开操作置于“with … as”管理的上下文管理器中

不需要用f.close()显式的关闭文件

离开缩进代码范围,自动关闭文件对象


with open('静夜思.txt', 'r', encoding='utf-8') as f:
for line in f: 
print(line.strip()) 
print(f.closed)            
# False,缩进中打开状态
print(f.closed)                
# True,关闭状态

文件的读取操作

file.read()
file.readline()
file.readlines()
file.seek()
file.tell()

file.seek(offset)

用于移动文件指针到指定的位置

当指针移动到文件结尾后,读不到数据

可使用seek(0) 将文件读取指针移动到起始处


with open('静夜思.txt','r',encoding='utf-8') as f:
print(*f)  # 输出全部数据,指针移到末尾
print(list(f)) # 文件对象转列表输出,空列表[]
f.seek(0)   # 指针移到开始处
print(list(f)) 
# ['静夜思\n', '李白\n', '床前明月光,疑是地上霜。\n', '举头望明月,低头思故乡。\n']

file.read(size=-1)

从文本文件中读取并返回最多size 个字符

当size 为负值或值是None 时,从当前位置读到结尾

若文件大于可用内存,可以反复调用read(size) 方法读取

with open('静夜思.txt', 'r', encoding='utf-8') as f:
txt = f.read(17)  # 读前17个字符
print(txt)        
# '静夜思\n床前明月光,疑是地上霜。\n'
txt = f.read()    # 读取文件中的全部剩余数据
print(txt)        
# '举头望明月,低头思故乡。\n'

file.readline(size=-1)

每次只读取一行数据,文件指针移动到下一行开始

如果指定了size ,将在当前行读取最多size 个字符

with open('静夜思.txt', 'r', encoding='utf-8') as f:
txt = f.readline()    # 读一行字符
print(txt)            
# '静夜思\n'
print(f.readline(5))  # 读5个字符,'床前明月光'
print(f.readline())   # 读一行,'举头望明月,低头思故乡。\n'
print(f.readline(10))  # 读到行末,',疑是地上霜。\n'

file.readlines(hint=-1)

读取文件中所有数据,指针移动到文件结尾处

可以指定hint 来读取的直到指定字符所在的行

with open('静夜思.txt', 'r', encoding='utf-8') as f:
txt = f.readlines()   # 读取所有行
print(txt)  # ['静夜思\n', '床前明月光,…低头思故乡。\n']
f.seek(0)             
# 移动指针到文件起始位置
txt = f.readlines(6)  # 从当前位置读取到第6 个字符所在行结束
print(txt)   # ['静夜思\n', '床前明月光,疑是地上霜。\n']

文件写入方法

file.write(b)

将给定的字符串或字节流对象写入文件

with open('静夜思.txt', 'a', encoding='utf-8') as f:
f.write(poem_str)  # 将字符串poem_str写入文件,附加到后面
with open('静夜思.txt', 'r', encoding='utf-8') as f:
print(f.read())
poem_str = '独坐敬亭山\n众鸟高飞尽,孤云独去闲。\n相看两不厌,只有敬亭山。\n'

file.write(b)

将给定的字符串或字节流对象写入文件

with open('静夜思.txt', 'w', encoding='utf-8') as f:
f.write(poem_str)  # 将字符串poem_str写入文件,附加到后面
with open('静夜思.txt', 'r', encoding='utf-8') as f:
print(f.read())
poem_str = '独坐敬亭山\n众鸟高飞尽,孤云独去闲。\n相看两不厌,只有敬亭山。\n'

file.writelines(lines)

将一个元素全为字符串的列表写入文件

poem_lst = ['江雪\n', '千山鸟飞绝,万径人踪灭。\n', '孤舟蓑笠翁,独钓寒江
雪。\n']
with open('静夜思.txt', 'r', encoding='utf-8') as f:
print(f.read())
with open('静夜思.txt', 'w', encoding='utf-8') as f:
f.writelines(poem_lst)  # 将列表写入文件


相关文章
|
安全 Python
Python语言中常用的文件操作方法探讨
通过上述方法的结合使用,我们可以构筑出强大并且可靠的文件操作逻辑,切实解决日常编程中遇到的文件处理问题。
451 72
|
监控 Java 数据处理
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【7月更文挑战第31天】在 Python 系统编程中, 文件操作与 I/O 管理至关重要。
286 2
|
移动开发 安全 Linux
Python文件操作的"保险箱":with语句深度实战指南
本文深入解析Python中`with`语句的原理与高级应用,通过“保险箱”类比,形象展示资源管理机制。从上下文管理协议到实战场景,涵盖文件、数据库、网络等多种资源的高效安全处理方式,助你写出更优雅、可靠的代码。
305 1
|
缓存 数据库连接 数据库
Python文件操作的“保险箱”:with语句深度实战指南
本文深入探讨Python中with语句在文件操作中的应用及其优势。首先介绍其底层原理,基于上下文管理协议自动管理资源的获取与释放,避免手动关闭文件导致的资源泄漏问题。接着通过基础文件读写、异常处理进阶和复合资源管理等实战场景解析with语句的便捷性与安全性。同时,阐述如何自定义上下文管理器以满足特定需求,并分析其性能考量及优化策略。最后总结实战经验,强调优先使用内置管理器、明确异常处理以及保持代码可读性的重要性,助力开发者高效编写健壮的程序。
358 1
|
自然语言处理 安全 JavaScript
Python文件操作的“保险箱”:with语句深度实战指南
Python中的`with`语句是文件操作和资源管理的强大工具,如同一个智能保险箱,自动处理打开和关闭操作,避免手动管理可能引发的错误。它通过上下文管理协议(`__enter__`和`__exit__`方法)确保资源在使用后正确释放。无论是逐块读取大文件、同时读写文件,还是处理特殊编码文件,`with`语句都能简化代码并提高安全性。此外,自定义上下文管理器可扩展到数据库连接等场景,而常见错误如重复关闭文件或忽略异常也需注意。结合生成器表达式批量处理文件时,`with`语句仍能保持高效和安全。总之,`with`语句是资源管理的瑞士军刀,让复杂操作变得简单可靠。
468 1
|
存储 Python
Python文件操作(1)
【10月更文挑战第17天】
400 60
Python文件操作(1)
|
数据采集 存储 Python
Python文件操作2
【10月更文挑战第18天】
211 2
Python文件操作2
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
本文介绍了Python中的文件操作方法,包括使用open()打开文件、close()关闭文件、read()读取内容、readline()读取单行、readlines()读取多行、write()写入内容以及writelines()写入多行的方法。同时,探讨了文件操作模式和编码问题,并扩展了上下文管理器with...as的使用,以及对图片和音频文件操作的思考和练习。
312 1
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
|
存储 Python
Python文件操作
Python文件操作
|
存储 安全 Python
30天拿下Python之文件操作
30天拿下Python之文件操作
226 2

推荐镜像

更多