Python 3 – 文件I/O
本章涵盖了Python 3中所有可用的基本I/O函数。如需更多函数,请参考标准Python文档。
输出到屏幕
生成输出的最简单方法是使用 print 语句,其中可以传递一个或多个用逗号分隔的表达式。该函数将您传递的表达式转换为字符串,并将结果写入标准输出,如下所示 –
#!/usr/bin/python3
print("Python真是一门伟大的语言,是吧?")
在标准屏幕上产生以下结果 –
Python真是一门伟大的语言,是吧?
读取键盘输入
Python 2有两个内置函数可用于从标准输入读取数据,默认情况下来自键盘。这些函数是 input() 和 raw_input() 。
在Python 3中,raw_input()函数不推荐使用。而且,input()函数读取由引号 (”或””)括起来还是没有括起来的字符串键盘数据,都当做字符串读入。
输入函数
input([prompt]) 函数等同于raw_input函数,唯一不同的是assumes that the input is a valid Python expression and returns the evaluated result to you。
#!/usr/bin/python3
>>> x = input("输入一些东西:")
输入一些东西:10
>>> x
'10'
>>> x = input("输入一些东西:")
输入一些东西:'10' #输入的数据被当作带或不带引号(''或"")的字符串处理
>>> x
"'10'"
打开和关闭文件
到现在为止,您一直在读写标准输入和输出。现在,我们将看到如何使用实际数据文件。Python默认提供了基本函数和方法来操作文件。您可以使用 file 对象执行大多数文件操作。
打开函数
在读写文件之前,必须使用Python的内置open()函数打开文件。此函数创建一个 file 对象,将用于调用与它关联的其他支持方法。
语法
file object = open(file_name [, access_mode][, buffering])
以下是参数详情 –
- file_name - file_name参数是一个字符串值,其中包含您要访问的文件的名称。
-
access_mode - access_mode确定文件必须以哪种模式打开,即读取,写入,附加等。下表中提供了可能的值列表。这是一个可选参数,默认文件访问模式为read(r)。
-
buffering - 如果缓冲区值设置为0,则不执行缓冲。如果缓冲区值为1,则在访问文件时执行行缓冲。如果您将缓冲区值指定为大于1的整数,则使用指定的缓冲区大小执行缓冲操作。如果为负,则缓冲区大小为系统默认值(默认行为)。
下面列出了不同文件打开模式的列表 –
序号 | 模式与描述 |
---|---|
1 | r 以只读方式打开一个文件。文件指针将放在文件的开头。这是默认模式。 |
2 | rb 以二进制格式只读方式打开一个文件。文件指针将放在文件的开头。这是默认模式。 |
3 | r+ 打开一个文件进行读写。文件指针将放在文件的开头。 |
4 | rb+ 以二进制格式打开一个文件进行读写。文件指针将放在文件的开头。 |
5 | w 打开一个文件进行写入。如果文件存在则会覆盖文件。如果文件不存在,则会创建一个新的文件进行写入。 |
6 | wb 以二进制格式打开一个文件进行写入。如果文件存在则会覆盖文件。如果文件不存在,则会创建一个新的文件进行写入。 |
7 | w+ 打开一个文件进行读写。如果文件存在则会覆盖已有内容。如果文件不存在,则会创建一个新的文件进行读写。 |
8 | wb+ 以二进制格式打开一个文件进行读写。如果文件存在则会覆盖已有内容。如果文件不存在,则会创建一个新的文件进行读写。 |
9 | a 以追加模式打开一个文件。如果文件存在,则文件指针将会放在文件的结尾处。如果文件不存在,则会创建一个新的文件进行写入。 |
10 | ab 以二进制格式追加模式打开一个文件。如果文件存在,则文件指针将会放在文件的结尾处。如果文件不存在,则会创建一个新的文件进行写入。 |
11 | a+ 以追加模式打开一个文件进行读写。如果文件存在,则文件指针将会放在文件的结尾处。如果文件不存在,则会创建一个新的文件进行读写。 |
12 | ab+ 以二进制格式追加模式打开一个文件进行读写。如果文件存在,则文件指针将会放在文件的结尾处。如果文件不存在,则会创建一个新的文件进行读写。 |
文件对象属性
一旦打开了一个文件并且有一个 file 对象,你可以获取与该文件相关的各种信息。
下面是与文件对象相关的所有属性列表 −
序号 | 属性 & 描述 |
---|---|
1 | file.closed 如果文件已关闭则返回 True,否则返回 False。 |
2 | file.mode 返回文件打开时使用的访问模式。 |
3 | file.name 返回文件的名称。 |
注意 − 在 Python 3.x 中不支持 softspace 属性。
示例
#!/usr/bin/python3
# 打开一个文件
fo = open("foo.txt", "wb")
print ("文件名为: ", fo.name)
print ("是否已关闭 : ", fo.closed)
print ("访问模式 : ", fo.mode)
fo.close()
这将产生以下结果 –
文件名为: foo.txt
是否已关闭 : False
访问模式 : wb
close() 方法
close() 方法关闭文本文件之前会清除所有未写入的信息,关闭文件对象后,不能再写入任何内容。
当文件对象的引用被重新分配给另一个文件时,Python自动关闭该文件。使用close() 方法关闭文件是一个好的习惯。
语法
fileObject.close();
示例
#!/usr/bin/python3
# 打开一个文件
fo = open("foo.txt", "wb")
print ("文件名为: ", fo.name)
# 关闭已经打开的文件
fo.close()
这将产生以下结果 –
文件名为: foo.txt
读写文件
文件对象提供了一组访问方法,以使我们的生活更加轻松。我们将看到如何使用 read() 和 write() 方法来读取和写入文件。
write() 方法
write() 方法将任何字符串写入打开的文件。请注意,Python字符串可以具有二进制数据而不仅仅是文本。
write() 方法不会在字符串末尾添加换行符(‘\n’)-
语法
fileObject.write(string);
这里,传递参数是要写入打开文件的内容。
示例
#!/usr/bin/python3
# 打开一个文件
fo = open("foo.txt", "w")
fo.write( "Python是一种伟大的编程语言。\n是的,它是伟大的!!\n")
# 关闭已打开的文件
fo.close()
上面的方法将创建foo.txt文件,写入指定内容,最后将关闭该文件。如果你打开这个文件,则会有以下内容 –
Python是一种伟大的编程语言。
是的,它是伟大的!!
read() 方法
read() 方法从打开的文件中读取一个字符串。请注意,Python字符串可以具有二进制数据。除文本数据外。
语法
fileObject.read([count]);
在这里,传递的参数是要从打开文件中读取的字节数。此方法从文件开头开始读取,如果缺少count,则尝试尽可能多地读取,可能会一直读到文件结尾。
示例
我们来看一下上面创建的文件foo.txt。
#!/usr/bin/python3
# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print ("读取的字符串 : ", str)
# 关闭已打开的文件
fo.close()
这将产生以下结果 –
读取的字符串 : Python is
文件位置
tell() 方法告诉您文件中的当前位置;换句话说,下一次读取或写入将在文件开头的那么多字节处发生。
seek(offset[, from])
方法更改当前文件位置。offset参数指示要移动的字节数。源自参数指定从那些字节移动。
如果 from 设置为0,则文件的开头用作参考位置。如果设置为1,则使用当前位置作为参考位置。如果设置为2,则文件的末尾将作为参考位置。
示例
让我们以一个文件 foo.txt
为例,这个文件我们已经在上面创建过了。
#!/usr/bin/python3
# 打开文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print ("读取的字符串是 : ", str)
# 检测当前位置
position = fo.tell()
print ("当前文件位置 : ", position)
# 把指针再次定位到文件开头
position = fo.seek(0, 0)
str = fo.read(10)
print ("再次读取字符串 : ", str)
# 关闭打开的文件
fo.close()
这将产生以下结果 –
读取的字符串是 : Python is
当前文件位置 : 10
再次读取字符串 : Python is
重命名和删除文件
Python os 模块提供了帮助您执行文件处理操作的方法,例如重命名和删除文件。
要使用此模块,您需要首先导入它,然后可以调用任何相关函数。
rename()方法
rename() 方法接受两个参数,当前文件名和新文件名。
语法
os.rename(current_file_name, new_file_name)
示例
以下是重命名现有文件 test1.txt 的示例 –
#!/usr/bin/python3
import os
# 将文件test1.txt重命名为test2.txt
os.rename( "test1.txt", "test2.txt" )
remove()方法
您可以使用 remove() 方法通过提供要删除的文件的名称作为参数来删除文件。
语法
os.remove(file_name)
示例
以下是删除现有文件 test2.txt 的示例 –
#!/usr/bin/python3
import os
# 删除文件test2.txt
os.remove("text2.txt")
Python中的目录
所有文件都包含在不同的目录中,Python也没有处理这些目录的问题。os模块有几种方法可帮助您创建、删除和更改目录。
mkdir()方法
您可以使用 mkdir() 方法在当前目录中创建目录。您需要向此方法提供一个参数,其中包含要创建的目录的名称。
语法
os.mkdir("newdir")
示例
以下是在当前目录中创建目录 test 的示例 –
#!/usr/bin/python3
import os
# 创建目录"test"
os.mkdir("test")
chdir()方法
您可以使用 chdir() 方法更改当前目录。chdir()方法接受一个参数,即要将其设置为当前目录的目录的名称。
语法
os.chdir("newdir")
示例
以下是进入“/home/newdir”目录的示例 –
#!/usr/bin/python3
import os
# 将目录更改为“/home/newdir”
os.chdir("/home/newdir")
getcwd()方法
getcwd() 方法显示当前工作目录。
语法
os.getcwd()
示例
以下是提供当前目录的示例 –
#!/usr/bin/python3
import os
# 这将提供当前目录的位置
os.getcwd()
rmdir()方法
rmdir() 方法删除在方法中传递的目录。
在删除目录之前,应该先删除其中的所有内容。
语法
os.rmdir('dirname')
示例
以下是一个删除”/tmp/test”目录的示例。需要给出完全限定的目录名,否则它会在当前目录中搜索该目录。
#!/usr/bin/python3
import os
# This would remove "/tmp/test" directory.
os.rmdir( "/tmp/test" )
文件和目录相关方法
有三个重要来源,提供了处理和操作Windows和Unix操作系统上的文件和目录的实用程序方法。它们如下−
文件对象提供操作文件的函数。
这提供了处理文件以及目录的方法。