前言

在实际的编程当中,经常要将一些处理好的数据,写入到特定的文件中,供我们后期的查阅,最常见的就是各种日志文件。

Python 已集成了文件操作的方法,这里只讲解最常使用的一些操作技能,完全操作指南,您可以查看相应的文件。

基本输入/输出(I/O)

在正式开始讲文件操作时,先来讲两个比较重要的操作: 输入(input) 与 输出( output ) 。
输入: 检测键盘的输入,常用于检测用户的数据输入。
输出: 将处理好的数据进行输出,常见的是将数据显示到屏幕上。
Python 提供的输入函数有: input( ) 和 raw_input( ) 这两个,但是后者只允许在 Python 2.X 版本中使用。
Python 提供的输出函数有: print( )

标准输入

语法格式:

input( "Hint_information" )

Hint_information:用户输入前的提示信息(可缺省)。

实例如下:

# !/usr/bin/python
# -*- coding: UTF-8 -*-

text = input("请输入:")   # 提示用户输入信息
print("用户输入了:", text)

运行程序,此时程序会要求用户输入信息,这里输入: hello world !

实例输出:

请输入:hello world !
用户输入了: hello world !

标准输出

语法格式:

print(*objects, sep=' ', end='\n', file=sys.stdout)

由于经常使用,这里就不在叙述了。

打开/创建文件

在对文件的操作中,Python 已提供了很多基本而又实用的相关函数和方法。通常在操作文件时,都会创建一个文件对象,后面的操作都会使用该对象来进行操作。
Python 提供了 open( ) 函数来打开或创建一个文件,基本格式如下:

 file_object = open("文件名","访问模式","缓存控制")

参数说明:

  • file_object : 创建一个编辑文件的对象。
  • 文件名: 要访问/创建的文件名(需跟上后缀名),文件名前可以跟上绝对路径,只填写文件名时,默认使用相对路径。
  • 访问模式: 用于控制文件的编辑模式,如:读取、写入、读写....(具体看控制模式表),该参数可缺省,默认为只读( r )模式。
  • 缓存控制: 用于控制编辑文件时是否开启文件缓存,缓存空间大小。 具体为: 0: 不缓存, 1: 缓存, >1: 自定义缓存空间(就是该值的大小) ,<0: 使用系统默认大小的缓存空间

以下是 Python 提供的文件编辑模式:

模式权限含义组织形式
"r"(只读)--默认打开已存在文件,用于只读文本文件
"w"(只写)创建或重建文件,用于只写文本文件
"a"(追加)在文件尾追加数据,若文件不存在则创建只写文本文件
"r+"(可读可写)打开已存在文件,用于读/写文本文件
"w+"(可读可写)创建或重建文件,用于写/写文本文件
"a+"(可读可写)在文件尾追加数据,若文件不存在则创建读/写文本文件
"rb"(只读二进制)打开已存在文件,用于只读二进制文件
"wb"(只写二进制)创建或重建文件,用于只写二进制文件
"ab"(追加二进制)在文件尾追加数据,若文件不存在则创建只写二进制文件
"rb+"(可读可写二进制)打开已存在文件,用于读/写二进制文件
"wb+"(可读可写二进制)创建或重建文件,用于写/写二进制文件
"ab+"(可读可写二进制)在文件尾追加数据,若文件不存在则创建读/写二进制文件

常用文件编辑模式一览表:

模式rr+ww+aa+
创建
覆盖
指针在开始
指着在结尾

关闭文件

Python 提供 close() 的方法,来关闭已经打来了的文件。程序在执行 close()方法时,会刷新缓冲区里还没有写入文件中的内容,并将该内容写入到文件当中,然后执行文件的关闭操作。文件在关闭后便不能在往里面进行写入、读取等操作。
基本格式:

file_object.close( )

注意:在创建文件对象后,当该对象所指向的文件在未被关闭时,而又重新指向了另外一个文件变量时,前一个文件将会被自动关闭。所以在每次操作完文件后,最好使用 close() 方法进行文件的关闭。

以下是具体的,文件打开、关闭实例:

# !/usr/bin/python
# -*- coding: UTF-8 -*-

fo = open("D:/aa.txt","w+")   # 在D盘根目录下创建并打开 aa.txt 文件,权限为:读写模式

fo.close()   # 关闭 aa.txt 文件

运行程序:

此时在 D 盘的根目录下,已经创建了一个 aa.txt 的文本文件。

注意:在上面指定的是D盘,你也可以指定其它的目录,在指定目录时,各级目录使用的是 / 分隔符,这要区别于 Windowns 下的 \,这点应引起注意!当然你也可以不指定目录,这时 Python 使用的就是当前(相对路径)目录了。

读/写文件

Python 为用户提供了一系列的文件操作方法,使用这些方法可以使得我们在操作文时件更加简便、轻松。下面就来看看如何使用 read() 和 write() 方法来读取和写入文件。

write( )方法

write( ) 方法是 Python 提供的一个内容写入方法,使用该方法可以将任意字符串写入一个已经打开了的文件中。
语法格式:

file_object.write( string )

注:write() 方法不会在字符串的结尾添加换行符(\n)。

实例如下:

# !/usr/bin/python
# -*- coding: UTF-8 -*-

fo = open("D:/aa.txt","w+")   # 在D盘根目录下创建并打开 aa.txt 文件,权限为:读写模式

fo.write("Hello World!")   # 向文件写入内容" Hello World!"

fo.close()   # 关闭 aa.txt 文件

运行实例:

此时,打开D盘下的 aa.txt 文件,其中就会多了一条 Hello World! 的数据。

read( )方法

write( ) 方法是 Python 提供的一个文件内容读取方法,使用该方法可以从已经打开了的文件中读取想要的内容。
语法格式:

file_object.read([count])

参数说明:
count: 为想要读取的内容数量(单位为:字节),如果缺省该参数,Python将会以贪婪模式进行读取,进最大能力读出更多的文件内容。

注意:使用读取或写入方法时,都应注意程序当前的指针位置,这些方法操作的内容都是向后进行读取或写入的。

实例如下:

本实例依赖于前面的 aa.txt 文件,请确保文件中有相关内容。

# !/usr/bin/python
# -*- coding: UTF-8 -*-

fo = open("D:/aa.txt","r+")   # 打开D盘下的 aa.txt 文件,权限为:读写模式

str_1 = fo.read( 3 )   # 读取 5 Byte 内容
str_2 = fo.read( )   # 读取指针后面的内容

print( str_1 )
print( str_2 )

fo.close()   # 关闭 aa.txt 文件

实例输出:

Hel
lo World!

分析:可见程序在执行第一次 read() 后,指针就位移到了第一个 l 的后面,后面再进行相关的操作时,是以当前的指针位置为起点再进行计算的了。

文件对象属性

当一个文件被程序打开后,也就拥有了一个 file 属性,使用属性可以得到有关该文件的各种信息,属性的出现使得用户可以更好的编辑和管理文件。

Python提供的获取文件对象属性常用方法有:

属性描述
file_object.name返回文件名
file_opject.mode返回文件编辑的模式
file_object.closed返回文件当前编辑状态 (True : 文件关闭;False:文件编辑中)

实例如下:

# !/usr/bin/python
# -*- coding: UTF-8 -*-

fo = open("D:/aa.txt","r+")   # 在D盘根目录下创建并打开 aa.txt 文件,权限为:读写模式

print( fo.mode )    # 查看文件打开模式
print( fo.name )     # 查看打开文件的名称(含路径)
print( fo.closed )    # 查看文件是编辑中还是关闭中, 当前处于编辑中

fo.close()    # 关闭文件

print( fo.closed )    # 再次查看文件编辑状态

实例输出:

r+
D:/aa.txt
False
True

说明: 文件对象的属性不仅可以在文件编辑当中进行调用,同样可以在文件关闭后,一样可以进行调用,系统反馈回来的都是当前文件对象所拥有的属性。

文件指针

文件指针,即文件当前所在的编辑位置。在编辑文件中,我们经常需要指针所在的位置,然后再进行写入或读取操作。下面就来介绍文件指针的操作。

tell()方法:返回当前编辑文件中,指针所在的位置。 注:该方法只能在文件编辑中使用。
seek(offset [,whence])方法:修改文件指针的位置。
offset:表示要将指针移动的字节数。
whence:指定文件指针移动前的起始参考位置。( 0:表示将文件的开始处作为移动前参考位置;1:将当前指针位置作为移动前参考位置; 2:文件末尾作为移动前参考位置。)

实例如下:

同样使用上面生成的文件,实验前注意文件用有相关内容。

# !/usr/bin/python
# -*- coding: UTF-8 -*-

# 声明:源文件中存在内容"Hello World!"
fo = open("D:/aa.txt","r+")   # 打开 aa.txt 文件,权限为:读写模式

str_1 = fo.read( 3 )     # 读取 2 个字节的内容,此时指针向后移动 2 个字节
position = fo.tell()      # 获取已经读取2字节后的指针位置
print( "当前指针位置:" ,position  ," ,读取到的内容为:" ,str_1 )    # 查看当前指针所处位置

fo.seek( 0, 0)    # 将指针重新设置为文件的起始位置
str_2 = fo.read( 4 )    # 重新读取内容
print( "重新设置后的指针位置:" ,fo.tell( ) ," ,读取到的新内容为:" ,str_2)    # 再次查看指针位置

fo.close()    # 关闭文件

运行输出:

当前指针位置: 3 ,读取到的内容为: Hel
重新设置后的指针位置: 4 ,读取到的新内容为: Hell

注意:在进行本实例时,一定要注意编辑文件的模式。不同的编辑模式,很大程度上影响着本实例的实现。

重命名和删除文件

在对文件进行重命名或删除等操作时,需要用到Python提供的OS模块,通过该模块里的一些方法即可实现这些操作。

该模块还提供了很多常用操作,例如:目录的新建、删除等操作,后门我们再专门学习这个 OS 模块。

重命名文件

重命名一个文件,使用到的是 OS 模块中的 rename()方法。

语法格式:

os.rename(current_file_name, new_file_name)

参数说明:参数可以是单文件名,或者带有路径的文件名,不同的情况下,不同的使用方法。

实例如下:

将 D盘 下的 aa.txt 文件重命名为 new_aa.txt 。

# !/usr/bin/python
# -*- coding: UTF-8 -*-
import os    # 导入 os 模块

# 重命名 D盘 下的 aa.txt 为 new_aa.txt
os.rename( "D:/aa.txt", "D:/new_aa.txt")

运行实例:

此时打开D盘,可以看到目录下原来的 aa.txt 文本文件,已经被重命名为 new_aa.txt 文件。

删除文件

删除文件,使用到的是 OS 模块中的 remove()方法:

语法格式:

os.remove(file_name)

实例如下:

删除 D盘 下的 new_aa.txt 文本文件。

# !/usr/bin/python
# -*- coding: UTF-8 -*-
import os    # 导入 os 模块

# 删除 D盘 下的  new_aa.txt  文本文件
os.remove("D:/new_aa.txt")

运行实例:

此时,打开 D盘 可以看打原来的 new_aa.txt 的文本文件已经被删除了。

注意:以上的这两个实例,在执行中一定要注意文件的所在位置,如果所要操作的文件在当前工程中,此时可以省略声明文件的所在目录,直接使用文件名即可,Python 会自行查找得到;如果您所要编辑的文件不在当前工程或环境变量声明的目录下,此时一定要使用绝对路径进行声明,否则Python会报错,提示无法找到文件。

以下是编辑文件中的一些常用方法:

方法功能
file.read([count])读取文件内容
file.write( string )向文件写入内容
file.flush()将缓冲区的内容写入文件中
file.tell()查看当前指针位置
file.seek(offset [,whence])重新设定指针的位置
file.next()返回文件当前行的所有内容
file.readline([size])读取一整行内容,包括\n 字符
file.readlines([sizehint])读取文件所有行内容,直至遇到EOF结束
file.fileno()返回一个整型的文件描述符(一般用于底层I/O)
file.isatty()检查一个文件是否已经连接到终端设备。
file.truncate([size])从文件中截取指定的数据内容(可设置大小)
file.writelines(sequence)向文件中写入一个序列字符串列表内容

完整学习教程请访问Python3 入门教程——目录索引

最后修改:2022 年 06 月 09 日
如果觉得我的文章对你有用,请随意赞赏