Python - 文件操作
Python - 文件操作
打开关闭文件:
open
python中我们使用内置函数open对文件进行打开操作:
file object = open(file_name [, access_mode][, buffering])
file_name: 操作文件的路径,可为相对路径,也可以外绝对路径
access_mode: 文件打开的模式,有多种选择,默认不指定则时r,只读模式
bufffering: 指定缓冲区大小
不同模式打开文件的完全列表:
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
File对象的属性
一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。以下是和file对象相关的所有属性的列表:
属性 | 描述 |
---|---|
file.closed | 返回true如果文件已被关闭,否则返回false。 |
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
file.softspace | 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。 |
close()方法
file对象调用close()方法,将缓冲区还没写入的数据刷新到硬盘,然后关闭文件,文件关闭后,对象将不能再进行操作了。当一个文件的对象引用被只想另外一个问及那时,python会关闭之前的文件,用close()关闭文件是一个好的习惯。
文件的读写操作
write()方法
write方法可以将任何字符写入一个打开的文件,需要注意的是,在python中还可以写入二级制数据,不仅仅是字符串,且write在写入的字符串后并不会在行尾添加换行符\n
f = open("log.txt", "w") f.write("123") f.write("456") f.close()
123456
read()方法
read方法可以从一个打开的文件中读取数据,需要注意的是,在python中还可以读取二级制数据,不仅仅是字符串。
fileObject.read([count])
这里的conunt参数是读取的字符的个数,注意是字符的个数,不是字节的个数。
readline()方法
f.readline() 会从文件中读取单独的一行。换行符为 '\n'。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。
#!/usr/bin/python3
# 打开一个文件
f = open("/tmp/foo.txt", "r")
str = f.readline()
print(str)
# 关闭打开的文件
f.close()
执行以上程序,输出结果为:
Python 是一个非常好的语言。
readlines()方法
f.readlines() 将以列表的形式返回该文件中包含的所有行,列表中的一项表示文件的一行。如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。
#!/usr/bin/python3
# 打开一个文件
f = open("/tmp/foo.txt", "r")
str = f.readlines()
print(str)
# 关闭打开的文件
f.close()
执行以上程序,输出结果为:
['Python 是一个非常好的语言。\n', '是的,的确非常好!!\n']
另一种方式是迭代一个文件对象然后读取每行:
#!/usr/bin/python3
# 打开一个文件
f = open("/tmp/foo.txt", "r")
for line in f:
print(line, end='')
# 关闭打开的文件
f.close()
执行以上程序,输出结果为:
Python 是一个非常好的语言。
是的,的确非常好!!
这个方法很简单, 但是并没有提供一个很好的控制。 因为两者的处理机制不同, 最好不要混用。
文件定位操作
tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后。
seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
例子:就用我们上面创建的文件foo.txt。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 打开一个文件
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()
以上实例输出结果:
读取的字符串是 : www.runoob
当前文件位置 : 10
重新读取字符串 : www.runoob
重命名和删除文件
Python的 os模块 提供了帮你执行文件处理操作的方法,比如重命名和删除文件。要使用这个模块,你必须先导入它,然后才可以调用相关的各种功能。
rename()方法
rename()方法需要两个参数,当前的文件名和新文件名。
语法:
os.rename(current_file_name, new_file_name)
例子:下例将重命名一个已经存在的文件test1.txt。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 重命名文件test1.txt到test2.txt。
os.rename( "test1.txt", "test2.txt" )
remove()方法
你可以用remove()方法删除文件,需要提供要删除的文件名作为参数。
语法:
os.remove(file_name)
例子:下例将删除一个已经存在的文件test2.txt。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 删除一个已经存在的文件test2.txt
os.remove("test2.txt")
Python中目录操作
所有文件都包含在各个不同的目录下,不过Python也能轻松处理。os模块 有许多方法能帮你创建,删除和更改目录。
mkdir()方法
可以使用os模块的mkdir()方法在当前目录下创建新的目录们。你需要提供一个包含了要创建的目录名称的参数。
语法:
os.mkdir("newdir")
例子:下例将在当前目录下创建一个新目录test。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 创建目录test
os.mkdir("test")
chdir()方法
可以用chdir()方法来改变当前的目录。chdir()方法需要的一个参数是你想设成当前目录的目录名称。
语法:
os.chdir("newdir")
例子:下例将进入"/home/newdir"目录。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 将当前目录改为"/home/newdir"
os.chdir("/home/newdir")
getcwd()方法
getcwd()方法显示当前的工作目录。
语法:
os.getcwd()
例子:下例给出当前目录:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 给出当前的目录
os.getcwd()
rmdir()方法
rmdir()方法删除目录,目录名称以参数传递。在删除这个目录之前,它的所有内容应该先被清除。
语法:
os.rmdir('dirname')
例子:以下是删除" /tmp/test"目录的例子。目录的完全合规的名称必须被给出,否则会在当前目录下搜索该目录。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 删除”/tmp/test”目录
os.rmdir( "/tmp/test" )
文件操作方法总结
下表列出了 file 对象常用的函数:
序号 | 方法及描述 |
---|---|
1 |
关闭文件。关闭后文件不能再进行读写操作。 |
2 |
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 |
3 |
返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。 |
4 |
如果文件连接到一个终端设备返回 True,否则返回 False。 |
5 |
返回文件下一行。 |
6 |
从文件读取指定的字节数,如果未给定或为负则读取所有。 |
7 |
读取整行,包括 "\n" 字符。 |
8 |
读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizhint较大, 因为需要填充缓冲区。 |
9 |
设置文件当前位置 |
10 |
返回文件当前位置。 |
11 |
截取文件,截取的字节通过size指定,默认为当前文件位置。 |
12 |
将字符串写入文件,没有返回值。 |
13 |
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
python文件操作实例
# f = open(filename, mode)
# filename: 文件名称
# mode:打开模式 "r":只读,"w":只写,会清空源文件,"a":追加内容到文件末尾
# "r+":读写,各种模式中家b表示以二进制形式,例如:"rb+":以二进制形式读写打开文件。
data = open("data.txt", "r")
-
print ("文件的名称:" + data.name)
-
print ("是否已关闭:" + str(data.closed))
-
print ("访问模式:" + data.mode)
-
print ("末尾是否强制加空格:" + str(data.softspace))
# f.read(size):读取文件,size表示读取的数量
# f.readline():读取文件的一行,当使用for循环时,会自动调用本函数
# f.readlines():以列表的形式读取文件,一行为一个元素
文件定位
# f.seek(0):回到文件的开头, f.seek(1):返回文件的当前位置, f.seek(2):到文件的末尾
# f.tell():返回文件的当前位置
data.close()