Python3 - 文件I/O

Python3 - 文件I/O 首页 / Python3入门教程 / Python3 - 文件I/O

到目前为止,无涯教程一直在从控制台获取输入,并将其写回到控制台以与用户进行交互。

在其他编程语言中,文件处理实现有些冗长或复杂,但在Python中则更容易且更短。

在Python中,文件在两种模式下被视为文本或二进制。该文件可以是文本格式或二进制格式,并且文件的每一行都以特殊字符结尾。

因此,可以按以下顺序进行文件操作。

  • 打开文件
  • 读取或写入
  • 执行操作
  • 关闭文件

打开文件

Python提供了 open()函数,该函数接受两个参数,即文件名和用于访问文件的访问方式。该函数返回一个文件对象,该文件对象可用于执行各种操作,例如读取,写入等。

file object = open(<file-name>, <access-mode>, <buffering>)   

可以使用各种模式(如读,写或追加)访问文件。以下是有关打开文件的访问模式的详细信息。

SNmode说明
1 r它将打开文件进入只读模式。文件指针位于开头。如果未通过任何访问模式,则默认情况下以该模式打开文件。
2 rb它将以二进制格式将文件打开为只读。文件指针位于文件的开头。
3 r +它将打开文件以读取和写入两者。文件指针位于文件的开头。
4 rb +它打开文件以二进制格式读取和写入。文件指针位于文件的开头。
5 w它将打开仅写文件。如果先前存在,它将覆盖文件;如果不存在相同名称的文件,它将创建一个新文件。
6 wb它将打开要写入的文件仅以二进制格式。如果文件先前存在,它将覆盖文件;如果文件不存在,则创建一个新文件。
7 w +它将打开文件以进行读写。它与r +的不同之处在于,如果存在一个文件,它将覆盖先前的文件,而r +不会覆盖先前写入的文件。如果不存在文件,它将创建一个新文件。文件指针位于文件的开头。
8 wb +它打开文件以二进制格式写入和读取。文件指针位于文件的开头。
9 a它将以附加模式打开文件。如果存在,文件指针将位于先前写入文件的末尾。如果不存在同名文件,它将创建一个新文件。
10 ab将以附加模式以二进制格式打开文件。指针位于先前写入文件的末尾。如果不存在同名文件,将以二进制格式创建一个新文件。
11 a +打开一个文件,以追加和读取两者。如果文件存在,文件指针将保留在文件末尾。如果不存在同名文件,它将创建一个新文件。
12 ab +它将打开一个文件,以追加和读取二进制格式的文件。文件指针保留在文件末尾。

让无涯教程看一个简单的示例,以读取模式打开一个名为" file.txt"的文件(存储在同一目录中),然后在控制台上打印其内容。

#在读取模式下打开文件file.txt
fileptr = open("file.txt","r")  
  
if fileptr:  
    print("file is opened successfully")  

输出:

<class '_io.TextIOWrapper'>
file is opened successfully

在上面的代码中,已经传递了 filename 作为第一个参数,并以读取模式打开了文件,就像提到了 r 作为第二个参数一样。 fileptr 保存文件对象,如果文件成功打开,它将执行print语句

close()方法

对文件完成所有操作后,必须使用 close()方法通过Python脚本将其关闭。在文件对象上调用 close()方法后,所有未写信息都会被销毁。

无涯教程可以使用Python当前打开的文件系统从外部对文件执行任何操作;因此,所有操作完成后,最好关闭文件。

下面给出了使用 close()方法的语法。

fileobject.close() 

考虑以下示例。

# 在读取模式下打开文件file.txt
fileptr = open("file.txt","r")  
  
if fileptr:  
    print("file is opened successfully")  
  
#关闭已打开的文件
fileptr.close()

关闭文件后,无法在文件中执行任何操作。该文件需要正确关闭。如果在文件中执行某些操作时发生任何异常,则程序将终止而不关闭文件。

应该使用以下方法来克服此类问题。

链接:https://www.learnfk.comhttps://www.learnfk.com/python3/python-files-io.html

来源:LearnFk无涯教程网

try:
   fileptr = open("file.txt")
   # 执行文件操作
finally:
   fileptr.close()

with语句

with语句是在python 2.5中引入的。在处理文件的情况下,with语句很有用。在要使用一对代码之间执行一对语句的情况下使用它。

下面提供了用于与该语句一起打开文件的语法。

with open(<file name>, <access mode>) as <file-pointer>:  
    #statement suite   

使用with语句的优点在于,无论嵌套块如何退出,它都能确保关闭文件。

对于文件,总是建议使用 with 语句,因为如果在嵌套的代码块中发生了中断,返回或异常,则它会自动关闭文件,无涯教程不需要编写 close()函数。它不会让文件损坏。

with open("file.txt",'r') as f:  
    content = f.read();  
    print(content)  

write方法

要将一些文本写入文件,需要使用具有以下访问模式之一的open方法打开文件。

w -  如果存在任何文件,它将覆盖该文件。文件指针位于文件的开头。

a  -  它将附加现有文件。文件指针位于文件末尾。如果不存在文件,它将创建一个新文件。

# 在Append模式下打开File.txt。如果没有存在此类文件,则创建一个新文件。
fileptr = open("file2.txt", "w")

# 将内容附加到文件
fileptr.write('''Python is the modern day language. It makes things so simple.
It is the fastest-growing programing language''')

# 关闭打开的文件
fileptr.close()

输出:

File2.txt

Python is the modern-day language. It makes things so simple. It is the fastest growing programming language.

file2.txt的图

Python File Handling

无涯教程已经以 w 模式打开了文件。 file1.txt 文件不存在,它创建了一个新文件,并且已经使用 write()函数将内容写入了文件。

#在写入模式下打开file.txt.  
fileptr = open("file2.txt","a")
  
#覆盖文件的内容
fileptr.write(" Python has an easy syntax and user-friendly interaction.")  
    
#关闭已打开的文件
fileptr.close()

输出:

Python is the modern day language. It makes things so simple.
It is the fastest growing programing language Python has an easy syntax and user-friendly interaction.

file2.txt的图

Python File Handling

可以看到文件的内容已被修改。已以 a 模式打开文件,并将其内容附加到现有的 file2.txt 中。

要使用Python脚本读取文件,Python提供了 read()方法。 read()方法从文件中读取一个字符串。它可以读取文本和二进制格式的数据。

read()方法的语法如下。

fileobj.read(<count>)  

此处,计数是从文件开头开始要从文件读取的字节数。如果未指定计数,则它可能会读取文件的内容直到结束。

考虑以下示例。

#在读取模式下打开file.txt。如果不存在此类文件,则会导致错误。
fileptr = open("file2.txt","r")
#将文件的所有数据存储到可变内容中
content = fileptr.read(10) 
# 打印存储在文件中的数据类型
print(type(content))    
#打印文件的内容
print(content)     
#关闭已打开的文件
fileptr.close()  

输出:

<class 'str'>
Python is 

在上面的代码中,已经使用 read()函数读取了 file2.txt 的内容。将计数值传递为十,这意味着它将读取文件中的前十个字符。

如果使用以下行,则它将打印文件的所有内容。

content = fileptr.read()
print(content) 

输出:

Python is the modern-day language. It makes things so simple.
It is the fastest-growing programing language Python has easy an syntax and user-friendly interaction.

通过for循环读取文件

无涯教程可以使用for循环读取文件。考虑以下示例。

#在读取模式下打开file.txt。如果不存在此类文件,则导致错误。
fileptr = open("file2.txt","r");   
#运行一个循环
for i in fileptr:  
    print(i) # 我包含文件的每一行

输出:

Python is the modern day language.

It makes things so simple.

Python has easy syntax and user-friendly interaction.

读取文件

Python使用函数 readline()来方便地逐行读取文件。 readline()方法从头开始读取文件的行,即,如果两次使用readline()方法,则可以获取文件的前两行。

例 1: 使用readline()函数读取行
#在读取模式下打开file.txt。如果不存在此类文件,则会导致错误。
fileptr = open("file2.txt","r");   
#将文件的所有数据存储到可变内容中
content = fileptr.readline()   
content1 = fileptr.readline()
#打印文件的内容
print(content)   
print(content1)
#关闭已打开的文件
fileptr.close()  

输出:

Python is the modern day language.

It makes things so simple.

两次调用 readline()函数,这就是为什么它从文件读取两行的原因。

Python还提供了用于读取行的 readlines()方法。它返回行列表,直到到达 file(EOF)的末尾。

例 2: 使用readlines()函数读取行
#在读取模式下打开file.txt。如果不存在此类文件,则会导致错误。
fileptr = open("file2.txt","r");   
  
#将文件的所有数据存储到可变内容中
content = fileptr.readlines()   

#打印文件的内容
print(content)   
  
#关闭已打开的文件
fileptr.close()  

输出:

['Python is the modern day language.\n', 'It makes things so simple.\n', 'Python has easy syntax and user-friendly interaction.']

创建文件

可以通过使用以下访问模式之一(带有函数open())来创建新文件。

x  -  它将使用指定的名称创建一个新文件。它将导致错误的文件存在相同名称。

a  -  它将使用指定的名称创建一个新文件。如果文件已经存在且具有指定名称,它将内容附加到文件。

w -  如果不存在指定名称的文件,它将创建一个新文件。它将覆盖现有文件。

#在读取模式下打开file.txt。如果不存在此类文件,则会导致错误。  
fileptr = open("file2.txt","x") 
print(fileptr)  
if fileptr:  
    print("File created successfully")

输出:

<_io.TextIOWrapper name='file2.txt' mode='x' encoding='cp1252'>
File created successfully 

文件指针位置

Python提供了tell()方法,该方法用于打印文件指针当前所在的字节数。考虑以下示例。

# 在读取模式下打开文件file2.txt
fileptr = open("file2.txt","r")  

#最初,FilePointer为0
print("The filepointer is at byte :",fileptr.tell())  
  
#读取文件的内容
content = fileptr.read();  
  
#读取操作文件指针修改后。tell()返回Fileptr的位置。
  
print("After reading, the filepointer is at:",fileptr.tell())  

输出:

The filepointer is at byte : 0
After reading, the filepointer is at: 117

修改指针位置

在实际的应用程序中,有时需要在外部更改文件指针的位置,因为可能需要在各个位置读取或写入内容。

为此,Python提供了seek()方法能够在外部修改文件指针的位置。

下面给出了使用seek()方法的语法。

<file-ptr>.seek(offset[, from)  

seek()方法接受两个参数:

offset   -  它是指文件指针在文件中的新位置。

from     -  它指示要从其移动字节的参考位置。如果将其设置为0,则将文件的开头用作参考位置。如果设置为1,则将文件指针的当前位置用作参考位置。如果设置为2,则文件指针的末尾用作参考位置。

# 在读取模式下打开文件file2.txt 
fileptr = open("file2.txt","r")  
  
#最初,FilePointer为0
print("The filepointer is at byte :",fileptr.tell())  
  
#将文件指针位置更改为10。
fileptr.seek(10);  
  
#tell()返回Fileptr的位置。
print("After reading, the filepointer is at:",fileptr.tell())  

输出:

The filepointer is at byte : 0
After reading, the filepointer is at: 10

OS 模块

Python os 模块可与操作系统进行交互。 os模块提供文件处理操作中涉及的函数,如重命名,删除等。它提供了named()方法,用于将指定文件重命名为新名称。下面给出了使用 rename()方法的语法。

rename(current-name, new-name)  

第一个参数是当前文件名,第二个参数是修改后的名称。可以绕过这两个参数来更改文件名。

例 1:

import os  
  
#将file2.txt重命名为file3.txt
os.rename("file2.txt","file3.txt")

输出:

上面的代码将当前 file2.txt 重命名为 file3.txt

删除文件

os模块提供了 remove()方法,该方法用于删除指定的文件。下面给出了使用 remove()方法的语法。

remove(file-name) 

例 1

import os;  
#删除名为file3.txt的文件
os.remove("file3.txt")  

创建新目录

mkdir()方法用于在当前工作目录中创建目录。下面给出了创建新目录的语法。

mkdir(directory name)

例 1

import os  
  
#创建名称新目录的新目录
os.mkdir("new")  

getcwd()方法

此方法返回当前工作目录。下面给出了使用getcwd()方法的语法。

os.getcwd()

示例

import os
os.getcwd()

输出:

'C:\\Users\\DEVANSH SHARMA'

更改工作目录

chdir()方法用于将当前工作目录更改为指定目录。

下面给出了使用chdir()方法的语法。

chdir("new-directory")  
示例
import os 
# 使用新指令更改当前目录
os.chdir("C:\\Users\\DEVANSH SHARMA\\Documents")
#它将显示当前的工作目录
os.getcwd()

输出:

'C:\\Users\\DEVANSH SHARMA\\Documents'

删除目录

rmdir()方法用于删除指定的目录。

下面给出了使用rmdir()方法的语法。

os.rmdir(directory name)  

例 1

import os
#删除新目录
os.rmdir("directory_name")  

它将删除指定的目录。

写入文件

在Python中,存在将Python脚本的输出写入文件的要求。

模块 subprocess check_call()方法用于执行Python脚本并将该脚本的输出写入文件。

以下示例包含两个python脚本。脚本file1.py执行脚本file.py并将其输出写入文本文件 output.txt。

file.py

temperatures=[10,-20,-289,100]    
def c_to_f(c):    
    if c< -273.15:    
        return "That temperature doesn't make sense!"    
    else:    
        f=c*9/5+32    
        return f    
for t in temperatures:    
    print(c_to_f(t))    

file.py

import subprocess  
  
with open("output.txt", "wb") as f:  
    subprocess.check_call(["python", "file.py"], stdout=f)  

文件方法

文件对象提供了以下方法来在各种操作系统上操作文件。

SN方法说明
1 file.close()它将关闭打开的文件。该文件一旦关闭,就无法再读取或写入。
2 File.fush()它将刷新内部缓冲区。
3 File.fileno()它返回底层实现用来从OS请求I/O的文件描述符。
4 File.isatty()如果文件已连接到TTY设备,则返回true,否则返回false。
5 File.next()它将返回文件的下一行。
6 File.read([size])它将读取指定大小的文件。
7 File.readline([size])它从文件中读取一行并将文件指针放置到新行的开头。
8 File.readlines([sizehint])返回包含文件所有行的列表。它会使用readline()函数读取文件,直到出现EOF。
9 File.seek(offset [from)它将文件指针的位置修改为具有指定引用的指定偏移量。
10 File.tell()它返回文件指针在文件中的当前位置。
11 File.truncate([size])它将文件截断为可选的指定大小。
12 File.write(str)它将指定的字符串写入文件
13 File.writelines(seq)它将字符串序列写入文件。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Nginx核心知识150讲 -〔陶辉〕

玩转Git三剑客 -〔苏玲〕

Python核心技术与实战 -〔景霄〕

浏览器工作原理与实践 -〔李兵〕

.NET Core开发实战 -〔肖伟宇〕

React Hooks 核心原理与实战 -〔王沛〕

深入剖析Java新特性 -〔范学雷〕

Vue 3 企业级项目实战课 -〔杨文坚〕

互联网人的数字化企业生存指南 -〔沈欣〕

好记忆不如烂笔头。留下您的足迹吧 :)