Python(三十五)python文件操作(2)

简介: 5:文件指针操作函数 tell() seek()(1):tell()判断文件指针当前所处的位置lua复制代码f = open("log.txt", 'r', encoding="utf-8") print(f.tell()) print(f.read(10)) print(f.tell())输出:arduino复制代码0https://gu10 (2):seek()将文件指针移动至指定位置语法:bash复制代码file.seek(offset[, whence])其中,各个参数的含义如下:file:表示文件对象;whence:作为可选参数,用于指定文

2:read()  readline() 和 readlines() 函数

log.txt文件内容:

arduino

复制代码

时间里的
https://guanchao.site

(1):read() 函数:逐个字节或者字符读取文件中的内容;

正常使用:

ini

复制代码

#以 utf-8 的编码格式打开指定文件
f = open("log.txt", encoding = "utf-8")
#输出读取到的数据
print(f.read())
#关闭文件
f.close()

输出:

arduino

arduino

复制代码

时间里的
https://guanchao.site

 

使用 size 参数,指定 read() 每次可读取的最大字符(或者字节)数,例如:

ini

复制代码

#以 utf-8 的编码格式打开指定文件
f = open("log.txt",encoding = "utf-8")
#输出读取到的数据
print(f.read(4))
#关闭文件
f.close()

输出:

复制代码

时间里的

 

读取二进制打开的文件内容:

lua

复制代码

#以二进制形式打开指定文件,该文件编码格式为 utf-8
f = open("log.txt",'rb+')
byt = f.read()
print(byt)
print("\n转换后:")
print(byt.decode('utf-8'))
#关闭文件
f.close()

输出:

less

复制代码

b'\xe6\x97\xb6\xe9\x97\xb4\xe9\x87\x8c\xe7\x9a\x84\r\nhttps://guanchao.site'

 

转换后:

arduino

复制代码

时间里的
https://guanchao.site

 

(2):readline() 函数:逐行读取文件中的内容;

readline() 函数用于读取文件中的一行,包含最后的换行符“\n”

ini

复制代码

f = open("log.txt",encoding = "utf-8")
# 读取一行数据
byt = f.readline()
print(byt)

输出:

复制代码

时间里的

 

在逐行读取时,还可以限制最多可以读取的字符(字节)数,例如:

ini

复制代码

#以二进制形式打开指定文件
f = open("log.txt",'rb')
# 指定读取字节数
byt = f.readline(4)
print(byt)

输出:

bash

复制代码

b'\xe6\x97\xb6\xe9'

 

(3):readlines() 函数:一次性读取文件中多行内容。

readlines() 函数用于读取文件中的所有行,它和调用不指定 size 参数的 read() 函数类似,只不过该函数返回是一个字符串列表,其中每个元素为文件中的一行内容。

ini

复制代码

f = open("log.txt",'rb')
byt = f.readlines()
print(byt)

输出:

css

复制代码

[b'\xe6\x97\xb6\xe9\x97\xb4\xe9\x87\x8c\xe7\x9a\x84\r\n', b'https://guanchao.site']

 

3:write()和writelines():向文件中写入数据

在使用 write() 向文件中写入数据,需保证使用 open() 函数是以 r+、w、w+、a 或 a+ 的模式打开文件,否则执行 write() 函数会抛出 io.UnsupportedOperation 错误。

(1):wtite()

lua

复制代码

f = open("log.txt", 'a', encoding="utf-8")
 f.write("\n写入一行新数据")
 f.close()
 f = open("log.txt", encoding="utf-8")
 aa = f.read()
 print(aa)
 f.close()

输出:

arduino

复制代码

时间里的
https://guanchao.site
写入一行新数据

 

写入文件完成后,一定要调用 close() 函数将打开的文件关闭,否则写入的内容不会保存到文件中。例如,将上面程序中最后一行 f.close() 删掉,再次运行此程序并打开 log.txt,你会发现该文件是空的。这是因为,当我们在写入文件内容时,操作系统不会立刻把数据写入磁盘,而是先缓存起来,只有调用 close() 函数时,操作系统才会保证把没有写入的数据全部写入磁盘文件中。这个很重要  要注意

但是,在完成文件操作后,我不想使用close关闭文件就像读取到他的内容该怎么操作呢?

Python为我们提供了flush函数,它可以实现将缓冲区的数据写入文件中。

lua

复制代码

f = open("log.txt", 'a', encoding="utf-8")
 f.write("\n写入一行新数据flush")
 f.flush()

打开文件,我们可以看到:

arduino

复制代码

时间里的
 https://guanchao.site
 写入一行新数据
 写入一行新数据flush

有的同学可能会想到,通过设置 open() 函数的 buffering 参数可以关闭缓冲区,这样数据不就可以直接写入文件中了?对于以二进制格式打开的文件,可以不使用缓冲区,写入的数据会直接进入磁盘文件;但对于以文本格式打开的文件,必须使用缓冲区,否则 Python 解释器会 ValueError 错误。例如:

lua

复制代码

f = open("log.txt", 'w',buffering = 0)
 f.write("写入一行新数据---关闭缓冲区之后")

输出:

arduino

复制代码

Traceback (most recent call last):
  File "F:/camellia/python/testProject/main.py", line 63, in <module>
    import ospath
  File "F:\camellia\python\testProject\ospath.py", line 70, in <module>
    f = open("log.txt", 'w',buffering = 0)
ValueError: can't have unbuffered text I/O

 

(2):writelines()

writelines() 函数,可以实现将字符串列表写入文件中。

ini

复制代码

f = open('log.txt', 'r', encoding="utf-8")
 n = open('log1.txt','w+', encoding="utf-8")
 n.writelines(f.readlines())
 n.close()
 f.close()

打开log1.txt:

arduino

复制代码

时间里的
 https://guanchao.site
 写入一行新数据
 写入一行新数据flush

4:close() 关闭文件

Python的文件操作中,使用open创建/打开之后,必须使用close关闭。否则在某些操作的时候会报错:

lua

复制代码

import os
 # 打开 / 创建文件
 f = open("log.txt",'w')
 # 删除文件
 os.remove("log.txt")

输出报错:

arduino

复制代码

Traceback (most recent call last):
  File "F:/camellia/python/testProject/main.py", line 63, in <module>
    import ospath
  File "F:\camellia\python\testProject\ospath.py", line 83, in <module>
    os.remove("log.txt")
PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: 'log.txt'
目录
相关文章
|
5月前
|
安全 Python
Python语言中常用的文件操作方法探讨
通过上述方法的结合使用,我们可以构筑出强大并且可靠的文件操作逻辑,切实解决日常编程中遇到的文件处理问题。
235 72
|
5月前
|
移动开发 安全 Linux
Python文件操作的"保险箱":with语句深度实战指南
本文深入解析Python中`with`语句的原理与高级应用,通过“保险箱”类比,形象展示资源管理机制。从上下文管理协议到实战场景,涵盖文件、数据库、网络等多种资源的高效安全处理方式,助你写出更优雅、可靠的代码。
147 1
|
6月前
|
缓存 数据库连接 数据库
Python文件操作的“保险箱”:with语句深度实战指南
本文深入探讨Python中with语句在文件操作中的应用及其优势。首先介绍其底层原理,基于上下文管理协议自动管理资源的获取与释放,避免手动关闭文件导致的资源泄漏问题。接着通过基础文件读写、异常处理进阶和复合资源管理等实战场景解析with语句的便捷性与安全性。同时,阐述如何自定义上下文管理器以满足特定需求,并分析其性能考量及优化策略。最后总结实战经验,强调优先使用内置管理器、明确异常处理以及保持代码可读性的重要性,助力开发者高效编写健壮的程序。
155 1
|
6月前
|
自然语言处理 安全 JavaScript
Python文件操作的“保险箱”:with语句深度实战指南
Python中的`with`语句是文件操作和资源管理的强大工具,如同一个智能保险箱,自动处理打开和关闭操作,避免手动管理可能引发的错误。它通过上下文管理协议(`__enter__`和`__exit__`方法)确保资源在使用后正确释放。无论是逐块读取大文件、同时读写文件,还是处理特殊编码文件,`with`语句都能简化代码并提高安全性。此外,自定义上下文管理器可扩展到数据库连接等场景,而常见错误如重复关闭文件或忽略异常也需注意。结合生成器表达式批量处理文件时,`with`语句仍能保持高效和安全。总之,`with`语句是资源管理的瑞士军刀,让复杂操作变得简单可靠。
156 1
|
6月前
|
数据采集 运维 BI
Python 文件操作进阶|使用 shutil 实现高效文件复制
在开发和运维中,处理大量文件是常见需求,如备份配置、归档日志或构建部署包。手动复制粘贴已无法满足高效需求!Python 的 `shutil` 模块提供了强大的文件操作功能,支持单文件复制、目录树迁移及自动化任务构建。本文详解 `shutil.copy()` 基础用法与进阶技巧,如批量复制、自动路径检测、时间戳命名备份等,助你实现高效自动化。结合实战案例(如自动备份系统),让你的代码更专业!学习后,欢迎交流心得,一起精进 Python 技能。关注我,获取更多编程技巧与源码分享!
|
监控 Java 数据处理
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【7月更文挑战第31天】在 Python 系统编程中, 文件操作与 I/O 管理至关重要。
168 2
|
存储 Python
Python文件操作(1)
【10月更文挑战第17天】
236 60
Python文件操作(1)
|
数据采集 存储 Python
Python文件操作2
【10月更文挑战第18天】
110 2
Python文件操作2
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
本文介绍了Python中的文件操作方法,包括使用open()打开文件、close()关闭文件、read()读取内容、readline()读取单行、readlines()读取多行、write()写入内容以及writelines()写入多行的方法。同时,探讨了文件操作模式和编码问题,并扩展了上下文管理器with...as的使用,以及对图片和音频文件操作的思考和练习。
150 1
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
|
存储 Python
Python文件操作
Python文件操作

推荐镜像

更多