文件操作对编程语言的重要性不用多说,如果数据不能持久保存,信息技术也就失去了意义,Python 提供了必要的函数和方法进行默认情况下的文件基本操作。
open 函数
用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。
语法:
file object = open(file_name [,access_mode][,buffering])
各个参数的细节如下:
-
file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
-
access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
-
buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
不同模式打开文件的完全列表:
模式
|
描述
|
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。
|
总结:
对文件进行操作的流程:
第一,建立文件对象。
第二,调用文件方法进行操作。
第三,不要忘了关闭文件。(文件不关闭的情况下,内容会放在缓存,虽然Python会在最后自动把内容读到磁盘,但为了以防万一,要养成关闭文件的习惯)
实例讲解:
(1)r模式
在只读模式下写入内容会报错。
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/10/27 22:35
-
# @File :test.py
-
-
f = open("aa", 'r')
-
# read是逐字符地读取,是read可以指定参数,设定需要读取多少字符,无论一个英文字母还是一个汉字都是一个字符
-
f_read = f.read()
-
print (f_read)
-
f.close()
-
-
-
f1 = open("aa", 'r')
-
# readline只能读取第一行代码,原理是读取到第一个换行符就停止。
-
f1_read = f1.readline()
-
print (f1_read)
-
f1.close()
-
-
-
f2 = open("aa", 'r')
-
# readlines会把内容以列表的形式输出。
-
f2_read = f2.readlines()
-
print (f2_read)
-
f2.close()
-
-
#使用for循环可以把内容按字符串输出。
-
# 输出一行内容输出一个空行,一行内容一行空格... 因为文件中每行内容后面都有
-
#一个换行符,而且print()语句本身就可以换行,如果不想输出空行,就需要使用下面的语句::print(line.strip())
-
f3 = open('aa','r')
-
for line in f3.readlines():
-
# print(line)
-
print(line.strip())
-
f3.close()
运行结果:
dd
ddbnbvm mnb,nj,j mnbm,j
cc
dd
['dd\n', 'ddbnbvm mnb,nj,j mnbm,j\n', 'cc\n']
dd
ddbnbvm mnb,nj,j mnbm,j
cc
(2)w模式
在进行操作前,文件中所有内容会被清空。比如在file1中写入'hello world',程序执行后file1中就只剩下一句'hello
world'
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/10/27 22:53
-
# @File :test1.py
-
-
f1 = open('bb.txt', 'w')
-
f_w =f1.write("hello world!")
-
print (f_w)
-
f1.close()
(3)a模式
与w模式不同的是,a模式不会把原来内容清空,而是光标移到内容最后位置,继续写入新内容。比如在最后追加'hello world'
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/10/27 22:53
-
# @File :test1.py
-
-
f2 = open('bb.txt', 'a')
-
f_w =f2.write("hello world!")
-
print (f_w)
-
f2.close()
另外还有下面几种模式:
r+:读写模式,光标默认在起始位置,当需要写入的时候,光标自动移到最后
w+:写读模式,先清空原内容,再写入,也能够读取
a+:追加读模式,光标默认在最后位置,直接写入,也能够读取。
with 语句
with 语句可以自动帮我们调用close()方法,当with代码块执行完毕时,会自动关闭文件释放内存资源,不用特意加f.close()
codecs 模块帮我们在读文件时自动转换编码,直接读出unicode
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/10/27 22:53
-
# @File :test1.py
-
-
import codecs
-
with open('bb.txt', 'r') as f:
-
print f.read()
-
-
-
# codecs模块帮我们在读文件时自动转换编码,直接读出unicode
-
-
with codecs.open('bb.txt', 'r', 'gbk') as f:
-
f.read()
Python File read() 方法
read() 方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。
以下实例演示了 read() 方法的使用:
文件 file.txt 的内容如下:
1:
2:
3:
4:
5:
读取文件的内容(10个字节):
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/10/27 22:53
-
# @File :test1.py
-
-
-
# 打开文件
-
import codecs
-
-
fo = codecs.open("file.txt", "rb+")
-
print "文件名为: ", fo.name
-
-
line = fo.read(10)
-
print "读取的字符串: %s" % (line)
-
-
# 关闭文件
-
fo.close()
执行结果:
文件名为: file.txt
读取的字符串: 1:
Python File readlines() 方法
readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理。
如果碰到结束符 EOF 则返回空字符串。
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/10/27 22:53
-
# @File :test1.py
-
-
-
# 打开文件
-
import codecs
-
-
fo = codecs.open("file.txt", "r")
-
for line in fo.readlines():
-
line = line.strip()
-
print "读取的数据是:%s" % (line)
-
-
# 关闭文件
-
fo.close()
执行结果:
读取的数据是:1:this is python book
读取的数据是:2:this is python book
读取的数据是:3:this is python book
读取的数据是:4:this is python book
读取的数据是:5:this is python book
读取的数据是:6:this is python book
Python File flush() 方法
flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/10/27 22:53
-
# @File :test1.py
-
-
-
# 打开文件
-
import codecs
-
-
fo = codecs.open("file.txt", "rb+")
-
print "文件名为: ", fo.name
-
-
# 刷新缓冲区
-
fo.flush()
-
-
# 关闭文件
-
fo.close()
Python File write() 方法
write() 方法用于向文件中写入指定字符串。
在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.Xie
-
# @Time :2017/10/27 22:53
-
# @File :test1.py
-
-
-
# 打开文件
-
import codecs
-
-
fo = codecs.open("file.txt", "w")
-
print "文件名为: ", fo.name
-
astr = "this is python book"
-
fo.write(astr)
-
-
# 关闭文件
-
fo.close()
阅读(1281) | 评论(0) | 转发(0) |