python write函数换行_三步搞定 Python 中的文件操作

96818e09d1d5cc7ea81cea09d6965a66.png

当程序运行时,变量是保存数据的好方法,但变量、序列以及对象中存储的数据是暂时的,程序结束后就会丢失,如果希望程序结束后数据仍然保持,就需要将数据保存到文件中。

Python 提供了内置的文件对象,以及对文件、目录进行操作的内置模块,通过这些技术可以很方便地将数据保存到文件(如文本文件等)中。

一、文件的概念

在计算机中,文件是以二进制的方式保存在磁盘上的。

文件分为文本文件和二进制文件。

1、文本文件

可以使用文本编辑软件查看,本质上还是二进制文件,例如:python 的源程序。

2、二进制文件

保存的内容不是给人直接阅读的,而是提供给其他软件使用的。例如:图片文件、音频文件、视频文件等等,二进制文件不能使用文本编辑软件查看。

Python 中,对文件的操作有很多种,常见的操作包括创建、删除、修改权限、读取、写入等,这些操作可大致分为以下 2 类:

  • 删除、修改权限:作用于文件本身,属于系统级操作。
  • 写入、读取:是文件最常用的操作,作用于文件的内容,属于应用级操作。

二、文件的基本操作

1、操作文件的步骤

文件的应用级操作可以分为以下 3 步,每一步都需要借助对应的函数实现:

  1. 打开文件:使用 open() 函数,该函数会返回一个文件对象;
  2. 对已打开文件做读/写操作:读取文件内容可使用 read()、readline() 以及 readlines() 函数;向文件中写入内容,可以使用 write() 函数。
  3. 关闭文件:完成对文件的读/写操作之后,最后需要关闭文件,可以使用 close() 函数。

2、打开文件的方式

在 Python 中,如果想要操作文件,首先需要创建或者打开指定的文件,并创建一个文件对象,而这些工作可以通过内置的 open() 函数实现。

语法如下:

file = open(file_name [, mode='r' [ , buffering=-1 [ , encoding = None ]]])
  • file:表示要创建的文件对象。
  • file_name:要创建或打开文件的文件名称。
  • mode:用于指定文件的打开模式。默认以只读(r)模式打开文件。
  • buffering:用于指定对文件做读写操作时,是否使用缓冲区。
  • encoding:手动设定打开文件时所使用的编码格式,不同平台的 ecoding 参数值也不同,以 Windows 为例,其默认为 cp936(实际上就是 GBK 编码)。

打开文件的常用模式

模式说明
以只读方式打开文件。文件的指针将会放在文件的开头,这是默认模式。如果文件不存在,抛出异常
w以只写方式打开文件。如果文件存在会被覆盖。如果文件不存在,创建新文件
a以追加方式打开文件。如果该文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入
r+以读写方式打开文件。文件的指针将会放在文件的开头。如果文件不存在,抛出异常
w+以读写方式打开文件。如果文件存在会被覆盖。如果文件不存在,创建新文件
a+以读写方式打开文件。如果该文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入

1f2fd1c04e7d457cb715d7ffe533ed65.png

open()是否需要缓冲区

通常情况下、建议大家在使用 open() 函数时打开缓冲区,即不需要修改 buffing 参数的值。

如果 buffing 参数的值为 0(或者 False),则表示在打开指定文件时不使用缓冲区;如果 buffing 参数值为大于 1 的整数,该整数用于指定缓冲区的大小(单位是字节);如果 buffing 参数的值为负数,则代表使用默认的缓冲区大小。

目前为止计算机内存的 I/O 速度仍远远高于计算机外设(例如键盘、鼠标、硬盘等)的 I/O 速度,如果不使用缓冲区,则程序在执行 I/O 操作时,内存和外设就必须进行同步读写操作,也就是说,内存必须等待外设输入(输出)一个字节之后,才能再次输出(输入)一个字节。这意味着,内存中的程序大部分时间都处于等待状态。

而如果使用缓冲区,则程序在执行输出操作时,会先将所有数据都输出到缓冲区中,然后继续执行其它操作,缓冲区中的数据会有外设自行读取处理;同样,当程序执行输入操作时,会先等外设将数据读入缓冲区中,无需同外设做同步读写操作。

3、read 方法 —— 读取文件

read 方法可以一次性读入并返回文件的所有内容。

read() 函数的基本语法格式如下:

file.read([size])

其中,file 表示已打开的文件对象;size 作为一个可选参数,用于指定一次最多可读取的字符(字节)个数,如果省略,则默认一次性读取所有内容。

如果忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问。

注意:read 方法执行后,会把文件指针移动到文件的末尾。

示例:

# 1. 打开 - 文件名需要注意大小写
file = open("README")

# 2. 读取
text = file.read()
print(text)

# 3. 关闭
file.close()

在开发中,通常会先编写打开和关闭的代码,再编写中间针对文件的读/写操作!

4、按行读取文件内容

read 方法默认会把文件的所有内容一次性读取到内存。

如果文件太大,对内存的占用会非常严重。

readline 方法可以一次读取一行内容,包含最后的换行符“n”。方法执行后,会把文件指针移动到下一行,准备再次读取。

file.readline([size])

其中,file 为打开的文件对象;size 为可选参数,用于指定读取每一行时,一次最多读取的字符(字节)数。

读取大文件的正确姿势

# 打开文件
file = open("README")

while True:
    # 读取一行内容
    text = file.readline()

    # 判断是否读到内容
    if not text:
        break

    # 每读取一行的末尾已经有了一个 `n`
    print(text, end="")

# 关闭文件
file.close()

示例:

小文件复制

# 1. 打开文件
file_read = open("README")
file_write = open("README[复件]", "w")

# 2. 读取并写入文件
text = file_read.read()
file_write.write(text)

# 3. 关闭文件
file_read.close()
file_write.close()

大文件复制

# 1. 打开文件
file_read = open("README")
file_write = open("README[复件]", "w")

# 2. 读取并写入文件
while True:
    # 每次读取一行
    text = file_read.readline()

    # 判断是否读取到内容
    if not text:
        break

    file_write.write(text)

# 3. 关闭文件
file_read.close()
file_write.close()

对于按行来读取文件,还有一个 readlines() 函数。

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

和 readline() 函数一样,readlines() 函数在读取每一行时,会连同行尾的换行符一块读取。

5、文件指针

文件指针可以理解为一个标记,它标记从哪个位置开始读取数据。

第一次打开文件时,通常文件指针会指向文件的开始位置,当执行了 read 方法后,文件指针默认情况下会移动到读取内容的末尾。

如果执行了一次 read 方法,读取了所有内容,那么再次调用 read 方法,还能够获得到内容吗?

答案是不能,第一次读取之后,文件指针移动到了文件末尾,再次调用不会读取到任何的内容。

# 首先在 README 文件中写了8个1
# 1. 打开 - 文件名需要注意大小写
file = open("README")
# 2. 读取
text = file.read()
print(text)
text = file.read()
print("-" * 10)
print(text)
# 3. 关闭
file.close()
#1111111
#----------
#

6、向文件中写入数据

Python 中的文件对象提供了 write() 函数,可以向文件中写入指定内容。该函数的语法格式如下:

file.write(string)

在写入文件完成后,一定要调用 close() 函数将打开的文件关闭,否则写入的内容不会保存到文件中。

这是因为,当我们在写入文件内容时,操作系统不会立刻把数据写入磁盘,而是先缓存起来,只有调用 close() 函数时,操作系统才会保证把没有写入的数据全部写入磁盘文件中。

写入文件示例:

# 打开文件
f = open("README", "w")

f.write("hello python!n")
f.write("今天天气真好")

# 关闭文件
f.close()

如果向文件写入数据后,不想马上关闭文件,也可以调用文件对象提供的 flush() 函数,它可以实现将缓冲区的数据写入文件中。

f = open("a.txt", 'w')
f.write("写入一行新数据")
f.flush()

三、文件/目录的常用管理操作

在终端 / 文件浏览器中可以执行常规的文件 / 目录管理操作,例如:创建、重命名、删除、改变路径、查看目录内容等等。

在 Python 中,如果希望通过程序实现上述功能,需要导入 os 模块。

1、文件操作

方法名说明示例
rename重命名文件os.rename(源文件名, 目标文件名)
remove删除文件os.remove(文件名)

2、目录操作

方法名说明示例
listdir目录列表os.listdir(目录名)
mkdir创建目录os.mkdir(目录名)
rmdir删除目录os.rmdir(目录名)
getcwd获取当前目录os.getcwd()
chdir修改工作目录os.chdir(目标目录)
path.isdir判断是否是文件os.path.isdir(文件路径)

文件或者目录的操作都支持相对路径和绝对路径。


7d7e46697a159b3bdba39c9e93c2a9bf.png
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值