Chinaunix首页 | 论坛 | 博客
  • 博客访问: 229794
  • 博文数量: 57
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 557
  • 用 户 组: 普通用户
  • 注册时间: 2015-10-01 18:05
文章分类

全部博文(57)

文章存档

2017年(57)

我的朋友

分类: Python/Ruby

2017-10-27 23:56:00

文件操作对编程语言的重要性不用多说,如果数据不能持久保存,信息技术也就失去了意义,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模式


在只读模式下写入内容会报错。

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.Xie
  4. # @Time :2017/10/27 22:35
  5. # @File :test.py

  6. f = open("aa", 'r')
  7. # read是逐字符地读取,是read可以指定参数,设定需要读取多少字符,无论一个英文字母还是一个汉字都是一个字符
  8. f_read = f.read()
  9. print (f_read)
  10. f.close()


  11. f1 = open("aa", 'r')
  12. # readline只能读取第一行代码,原理是读取到第一个换行符就停止。
  13. f1_read = f1.readline()
  14. print (f1_read)
  15. f1.close()


  16. f2 = open("aa", 'r')
  17. # readlines会把内容以列表的形式输出。
  18. f2_read = f2.readlines()
  19. print (f2_read)
  20. f2.close()

  21. #使用for循环可以把内容按字符串输出。
  22. # 输出一行内容输出一个空行,一行内容一行空格... 因为文件中每行内容后面都有
  23. #一个换行符,而且print()语句本身就可以换行,如果不想输出空行,就需要使用下面的语句::print(line.strip())
  24. f3 = open('aa','r')
  25. for line in f3.readlines():
  26.     # print(line)
  27.     print(line.strip())
  28. 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'

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.Xie
  4. # @Time :2017/10/27 22:53
  5. # @File :test1.py

  6. f1 = open('bb.txt', 'w')
  7. f_w =f1.write("hello world!")
  8. print (f_w)
  9. f1.close()

(3)a模式

与w模式不同的是,a模式不会把原来内容清空,而是光标移到内容最后位置,继续写入新内容。比如在最后追加'hello world'


点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.Xie
  4. # @Time :2017/10/27 22:53
  5. # @File :test1.py

  6. f2 = open('bb.txt', 'a')
  7. f_w =f2.write("hello world!")
  8. print (f_w)
  9. f2.close()

   另外还有下面几种模式:
    r+:读写模式,光标默认在起始位置,当需要写入的时候,光标自动移到最后

     w+:写读模式,先清空原内容,再写入,也能够读取

     a+:追加读模式,光标默认在最后位置,直接写入,也能够读取。


with 语句
with 语句可以自动帮我们调用close()方法,当with代码块执行完毕时,会自动关闭文件释放内存资源,不用特意加f.close()
codecs 模块帮我们在读文件时自动转换编码,直接读出unicode

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.Xie
  4. # @Time :2017/10/27 22:53
  5. # @File :test1.py

  6. import codecs
  7. with open('bb.txt', 'r') as f:
  8.     print f.read()


  9. # codecs模块帮我们在读文件时自动转换编码,直接读出unicode

  10. with codecs.open('bb.txt', 'r', 'gbk') as f:
  11.     f.read()

Python File read() 方法

read() 方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。

以下实例演示了 read() 方法的使用:

文件 file.txt 的内容如下:

1:
2:
3:
4:
5:
读取文件的内容(10个字节)

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.Xie
  4. # @Time :2017/10/27 22:53
  5. # @File :test1.py


  6. # 打开文件
  7. import codecs

  8. fo = codecs.open("file.txt", "rb+")
  9. print "文件名为: ", fo.name

  10. line = fo.read(10)
  11. print "读取的字符串: %s" % (line)

  12. # 关闭文件
  13. fo.close()
执行结果:
文件名为:  file.txt
读取的字符串: 1:

Python File readlines() 方法

readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理。

如果碰到结束符 EOF 则返回空字符串。


点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.Xie
  4. # @Time :2017/10/27 22:53
  5. # @File :test1.py


  6. # 打开文件
  7. import codecs

  8. fo = codecs.open("file.txt", "r")
  9. for line in fo.readlines():
  10.     line = line.strip()
  11.     print "读取的数据是:%s" % (line)

  12. # 关闭文件
  13. 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() 方法。

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.Xie
  4. # @Time :2017/10/27 22:53
  5. # @File :test1.py


  6. # 打开文件
  7. import codecs

  8. fo = codecs.open("file.txt", "rb+")
  9. print "文件名为: ", fo.name

  10. # 刷新缓冲区
  11. fo.flush()

  12. # 关闭文件
  13. fo.close()

Python File write() 方法

write() 方法用于向文件中写入指定字符串。

在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。


点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.Xie
  4. # @Time :2017/10/27 22:53
  5. # @File :test1.py


  6. # 打开文件
  7. import codecs

  8. fo = codecs.open("file.txt", "w")
  9. print "文件名为: ", fo.name
  10. astr = "this is python book"
  11. fo.write(astr)

  12. # 关闭文件
  13. fo.close()







阅读(1231) | 评论(0) | 转发(0) |
0

上一篇:python 练习

下一篇:python 练习1

给主人留下些什么吧!~~