Python中的文件对象?
在Python中,当我们尝试读取或写入文件时,不需要导入任何库,因为它是由系统原生处理的。
该open()函数打开一个文件并返回一个文件对象。**文件对象**包含方法和属性,这些方法和属性稍后可用于检索信息或操作已打开的文件。
文件操作
文件是磁盘上用于存储相关信息的命名位置,由于文件具有名称和位置,因此它存储在硬盘中。在Python中,文件操作按以下顺序执行:
- 打开文件。
- 读取或写入操作。
- 关闭文件。
使用'open()'函数打开文件
要同时打开一个文件进行读取和写入,必须使用内置的**open()**函数。**open()**函数使用两个参数。第一个是文件名,第二个是模式(读取或写入)。在Python中打开文件对象的语法如下:
File_obj = open("filename", "mode")
Python文件模式
打开文件后,可以指定文件模式。例如,如果要将追加模式**"a"**添加到文件,则写入**"w"**或读取**"r"**。此外,可以选择以二进制模式或文本格式打开文件。以下是open()函数支持的不同模式:
模式 | 描述 |
---|---|
‘r’ | 打开文件以进行读取。(默认) |
‘w’ | 打开文件以进行写入。如果文件不存在,则创建一个新文件;如果文件存在,则截断文件。 |
‘x’ | 打开文件以进行独占创建。如果文件已存在,则操作失败。 |
‘a’ | 打开以在文件末尾追加,而不截断它。如果文件不存在,则创建一个新文件。 |
‘t’ | 以文本模式打开。(默认) |
‘b’ | 以二进制模式打开。 |
‘+’ | 打开文件以进行更新(读取和写入) |
创建文本文件
让我们使用任何文本编辑器在Python中创建一个简单的文本文件。在下面的示例中,将在当前工作目录中创建一个新文件,并在打开新创建的文件时。
# Create a text file named "textfile.txt" in your current working directory f = open("textfile.txt", "w") # above will create a file named textfile.txt in your default directory f.write("Hello, Python") f.write("\nThis is our first line") f.write("\nThis is our second line") f.write("\nWhy writing more?, Because we can :)") f.close()
输出
读取文本文件
有多种方法可以在Python中读取文本文件,其中一些方法如下所示。
-
提取字符串的所有字符
-
读取一定数量的字符
-
逐行读取文件
-
遍历文件对象
-
分割文本文件中的行
提取字符串的所有字符
如果您想提取包含文件中所有字符的字符串,可以使用以下方法
file.read()
示例
下面是一个实现上述语法的程序
f = open("textfile.txt", "r") f.read()
输出
'Hello, Python\nThis is our first line\nThis is our second line\nWhy writing more?, Because we can :)'
读取一定数量的字符
如果您想从文件中读取字符串中一定数量的字符,可以使用如下所示的方法:
f = open("textfile.txt", "r") print(f.read(13))
输出
Hello, Python
逐行读取文件
但是,如果您想逐行读取文件,则可以使用readline()函数。
示例
f = open("textfile.txt", "r") print(f.readline()) print(f.readline()) print(f.readline()) print(f.readline())
输出
Hello, Python This is our first line This is our second line Why writing more?, Because we can :)
遍历文件对象
如果您想以最结构化和高效的方式读取或返回文件中的所有行,可以使用循环遍历方法。
f = open("textfile.txt", "r") for line in f: print(line)
输出
Hello, Python This is our first line This is our second line Why writing more?, Because we can :)
分割文本文件中的行
我们可以使用Python的split()函数分割从文本文件中获取的行。我们可以使用任何你选择的字符来分割文本,它可以是空格字符、冒号或其他字符。
with open("textfile.txt", "r") as f: data = f.readlines() for line in data: words = line.split() print(words)
输出
['There', 'are', 'tons', 'to', 'reason', 'to', "'fall", 'in', 'love', 'with', "PYTHON'"] ['See,', 'i', 'have', 'added', 'one', 'more', 'line', ':).'] ['Hello,', 'Python-Here', 'i', 'come', 'once', 'again!']
写入文件
写入文件很简单,您只需打开文件并传递要写入文件的文本即可。我们可以使用open()方法将数据追加到现有文件中。使用EOL字符在写入数据到文件后开始新的一行。
示例
f = open("textfile.txt", "w") f.write("There are tons to reason to 'fall in love with PYTHON'") f.write("\nSee, i have added one more line :).") f.close() f = open("textfile.txt", "r") for line in f: print(line)
输出
There are tons to reason to 'fall in love with PYTHON' See, i have added one more line :).
关闭文件
完成文件操作后,必须使用f.close()命令结束操作。这样,我们就完全关闭了文件,终止了所有正在使用的资源,并释放了它们以供系统在其他地方使用。
示例
f = open("textfile.txt", "r") f.close() f.readlines()
输出
关闭文件后,任何尝试使用文件对象的尝试都会引发错误。
Traceback (most recent call last): File "<pyshell#95>", line 1, in <module> f.readlines() ValueError: I/O operation on closed file.
使用"with"语句
with语句可以与文件对象一起使用。使用这两个(with语句和文件对象),我们在程序中获得了更简洁的语法和异常处理。
另一个优点是,一旦我们完成文件操作,任何打开的文件都会自动关闭。
语法
with open(“filename”) as file:
示例
在此示例中,文件在with块结束时自动关闭,因此无需显式调用close()方法。
with open("example.txt", "w") as file: file.write("This is an example using the with statement.") print ("File closed successfully!!")
输出
File closed successfully!!