首页 > 编程语言 >18 Python如何操作文件?

18 Python如何操作文件?

时间:2024-09-10 09:53:11浏览次数:10  
标签:文件 读取 Python 18 写入 模式 read open

本篇是 Python 系列教程第 18 篇,更多内容敬请访问我的 Python 合集

1 打开文件

通常使用内置的 open(文件路径, 模式, encoding="utf-8")函数。

  • 文件路径:可以是相对路径或绝对路径。
  • 模式:(可选)决定了文件打开后如何处理文件。
  • encoding:(可选)编码方式。

常见的模式有:

  • 'r' (默认):只读模式,如果文件不存在,则会引发 FileNotFoundError。
  • 'w':写入模式,如果文件存在则会清空内容再写入,如果文件不存在则创建新文件。
  • 'a':追加模式,在文件末尾追加内容,如果文件不存在则创建新文件。
  • 'b':二进制模式,用于处理二进制文件(如图像、音频等)。
  • '+':更新模式,用于同时进行读写操作。

可以将这些模式组合起来使用,例如:

  • 'rb':以二进制模式读取文件。
  • 'wb':以二进制模式写入文件。
  • 'ab':以二进制模式追加内容到文件。
  • 'r+':读写模式,可以读取和写入文件。
  • 'w+':写入并读取模式,先写入后读取。
  • 'a+':追加并读取模式,先追加后读取。

2 文件读取

如果open()函数执行成功,会返回一个文件对象。后续可以对这个对象进行读取或写入操作。

f = open('./data.txt', 'r', encoding='utf-8')

文件对象有个read()方法,会一次性读取文件里的所有内容,并返回字符串格式。

实例:

file = open('data.txt', 'r', encoding="utf-8")
print(file.read())

注意:

  • 如果调用过read()后再次调用,会返回空,因为程序会记录文件被读取的位置,第一次read()时已经读到文件末尾,第二次read()后面就没有内容了。
  • 大文件也不适合用read(),因为会一次性读取文件的所有内容,可能挤爆内存。

上面说大文件不适合用read(),那有别的替换方案吗?当然有,解决方案就是一次性只读取部分内容,如:

  • read()传一个数字参数如read(1024),表示一次读多少字节,下次再调用read(1024)时就会继续从上次的结束位置读取。
  • 使用readline(),此方法一次只会读取一行内容,是根据换行符来判断本行结尾的,而且换行符也会被当做内容的一部分被读取。

上面的两种方式可搭配while循环来用,另外还有一个readlines()方法,会一次性返回所有行,组成一个字符串列表,一般搭配for循环使用。

3 文件写入

调用open()函数时第二个参数传wa就可以进行文件写入操作。这里说明一点,如果第二个参数是r,且文件不存在就会报FileNotFoundError错误,但是wa就不会报错,它会自动创建一个文件。

在打开或创建文件之后就可以调用文件对象的write()方法进行写入操作了。

示例:

with open('data.txt', 'w', encoding="utf-8") as file:
    file.write("hello ")
    file.write("python")

data.txt内容:

hello python

注意write()方法并不会自动换行,需要手动添加换行符,如把代码改成file.write("hello\n"),data.txt就会变成:

hello
python

如果我们使用w模式,文件就只能写入不能读取,如果我们想先读取再写入,可以用r+模式

4 关闭文件

文件操作完毕后,文件对象需要调用一个close()方法关闭文件释放资源。

每次文件操作完毕后都应该关闭文件,但是有可能会粗心忘记关闭,怎么办呢?我们可以在调用open()函数打开文件的时候使用with关键字,然后用as指定读取到的文件,这样在with代码块执行完后文件就会被自动关闭了,实例:

# 使用 with 语句来读取文件
with open('data.txt', 'r', encoding='utf-8') as file:
    for line in file.readlines():
        print(line.strip())

标签:文件,读取,Python,18,写入,模式,read,open
From: https://www.cnblogs.com/GilbertDu/p/18405844

相关文章

  • 6、Python如何统计序列中元素的频度
    有一个列表如下:data=['a','c','f','b','f','e','k','d','f','k']如何统计每个元素出现的次数呢?方案一:使用Listcount方法如果只要知道某一个元素出现的次数,直接使用Listcount方法就可以data=['......
  • 【pytorch(cuda)】基于DQN算法的无人机三维城市空间航线规划(Python代码实现)
       ......
  • 【负荷预测】【没发表过论文】基于VMD-CNN-BiLSTM-Attention的负荷预测研究(Python代码
      ......
  • Introduction to data Science with Python
    FINALASSESEMENT.IntroductiontodataSciencewithPythonGeneralInstructionsThisisthefinalassessmentforthecourse.Youneedtodownloadthedatasetsprovidedtoanswerthequestions.The5datasetsnamed'World_Happiness_Report'(there......
  • Linux Makefile文件名处理函数知识详解
    GNUmake提供了一系列对文件名进行各种操作的函数:文件名替换、加前缀、去目录等。1.1dir函数:取路径名的目录dir函数用来从一个路径名中截取目录的部分。$(dirNAMES…)dir函数会从NAMES文件名序列中,取出各个文件路径名中的目录部分并返回.PHONY:allLIST=/home/wit/ban......
  • python 实现gamma 伽玛功能算法
    gamma伽玛功能算法介绍Gamma(伽玛)功能算法通常与不同的领域和应用相关,包括但不限于图像处理、光学测试、数学计算等。以下是根据您提供的搜索结果,对Gamma伽玛功能算法的一些概述:在图像处理中的Gamma校正在图像处理中,Gamma校正是一种用于调整图像亮度的方法,特别是为了校正......
  • python 实现gaussian高斯算法
    gaussian高斯算法介绍高斯算法(Gaussianalgorithm)是一个广泛的概念,因为“高斯”这个名字与许多不同的数学和算法技术相关联。但是,在大多数情况下,当人们提到“高斯算法”时,他们可能是在指高斯消元法(Gaussianelimination),这是一种在数学中用于求解线性方程组、计算矩阵的行列......
  • 2181. 合并零之间的节点
    给你一个链表的头节点 head ,该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val==0 。对于每两个相邻的 0 ,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的值之和。然后将所有 0 移除,修改后的链表不应该含有任何 0......
  • 中文关键字检索分析-导出到csv或者excel-多文件或文件夹-使用python和asyncio和pandas
    1.02版本把原来的tab一个个拼接成文件输出,改成pandas的dataframe使用asyncio库来使用协程,但是测试下来速度好像是差不多的。可能速度太快了,没能很好的测出来差异。原来的最初的代码是java版本的,现在用python重写一遍java版本使用completableFuture来异步IO,主要是文件输......
  • python编译安装亲测
    yumgroupinstall"DevelopmentTools"yuminstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-devellibffi-devellscd/opt/lsmkdirpythoncdpython/  ls  wgethttps://www.python.org/ftp/python/3......