首页 > 编程语言 > 详细

python基础3

时间:2017-01-10 10:04:08      阅读:296      评论:0      收藏:0      [点我收藏+]

内容概要:

 

一、文件操作

文件操作流程:

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件

基本操作:

1 #/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 #Author:W-D
4 f=open("test","r",encoding="utf-8")#打开文件,并告诉解释器以那种编码打开,编码不对会报错
5 data=f.read()#操作文件
6 print(data)#打印文件内容
7 f.close()#关闭文件

打开文件模式

  • r ,只读模式【默认】

  • w,只写模式【不可读:不存在则创建;存在则清空内容;】

  • x, 只写模式【不可读:不存在则创建,存在则报错】

  • a, 追加模式【不可读;不存在则创建;存在则只追加内容;】

“+”表示同时读写某个文件,特别注意在操作文件过程中明白文件指针的位置,稍后我会举例子说明文件针的问题。

  • r+,可读写文件【可读;可写;可追加】
  • w+,写读
  • a+,追加读

"b"表示处理二进制文件,意思是"b"类型打开的文件读的内容是字节类型(bytes),若写入文件也需要是字节类型,需要通过encode进行转化。(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

  • rb
  • wb
  • ab

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用),在python3中该模式已经废弃了,2.x版本中保留。

  • rU
  • r+U

示列一(r+模式):

下面着重说明文件指针和读写文件的关系,同时演示下以“b”模式打开的文件读写操作。

文件内容:

 1 You were the shadow to my light
 2 Did you feel us
 3 Another Star
 4 You fade away
 5 Afraid our aim is out of sight
 6 Wanna see us
 7 Alive
 8 Where are you now
 9 Where are you now
10 Where are you now

示列代码:

 1 #f.tell() 读取当前文件指针位置,单位为字符
 2 #f.seek() 重新偏移指针位置,参数为整数
 3 #f.readline()表示读取一行
 4 #/usr/bin/env python
 5 # -*- coding:utf-8 -*-
 6 #Author:W-D
 7 f=open("test","r+",encoding="utf-8")
 8 print(f.tell())#打印开始的指针位置
 9 data=f.readline()#读取第一行数据放在data里
10 print(len(data),data)#打印数据长度内容
11 print(f.tell())#打印当前指针位置
12 f.write("")#写文件内容
13 print(f.tell())#打印指针位置
14 f.close()#关闭文件
15 
16 结果:
17 0
18 28 were the shadow to my light
19 29
20 186
21 
22 修改后的文件变为:
23 
24 were the shadow to my light
25 Did you feel us
26 Another Star
27 You fade away
28 Afraid our aim is out of sight
29 Wanna see us
30 Alive
31 Where are you now
32 Where are you now
33 Where are you now我

结果分析:上述结果表明,以r+模式打开文件,一开始文件指针在0,但读取一部分内容后文件指针后移动,当使用write方法写文件时候,文件指针移到了末尾变成最后追加的方式,而并不是在读取文件时候的指针位置直接写。

示列二(以r+b):细心的小伙伴可以发现同样有r+模式,都是读取后再写内容,但是以“r+”模式指针移到了最后,追加写,而以“r+b”则指针不动,接着覆盖文件内容写。

 1 #/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 #Author:W-D
 4 f=open("test","r+b")#以b模式打开已经确定了编码不需要在写encoding
 5 print(f.tell())
 6 data=f.readline()
 7 print(type(data),data)
 8 print(f.tell())
 9 f.write(bytes("",encoding="utf-8"))#将字符串转化为bytes类型
10 print(f.tell())
11 f.close()
12 结果:
13 0
14 <class bytes> bwere the shadow to my light\r\n#可以看见内容为bytes类型
15 29
16 32

 

附上处理文件时候使用的常用方法:

 1 file.close() #关闭文件。关闭后文件不能再进行读写操作。
 2     
 3 file.flush() #刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
 4     
 5 file.fileno() #返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
 6     
 7 file.isatty() #如果文件连接到一个终端设备返回 True,否则返回 False。
 8     
 9 file.next() #返回文件下一行(迭代器)。
10     
11 file.read([size]) #从文件读取指定的字节数,如果未给定或为负则读取所有。
12 
13 file.readline([size]) #读取整行,包括 "\n" 字符。
14 
15 file.readlines([sizehint]) #读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizhint较大, 因为需要填充缓冲区。
16     
17 file.seek(offset[, whence]) #设置文件当前位置
18 
19 file.tell() #返回文件当前位置。
20 
21 file.truncate([size]) #截取文件,截取的字节通过size指定,默认为当前文件位置。
22 
23 file.write(str) #将字符串写入文件,没有返回值。
24 
25 file.writelines(list) #向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

 

文件内容循环:

在对文件的操作过程中,最多的就是读取并处理文件内容,当文件很大的时候,使用read方法一次性读取是非常不明智的,不仅处理慢,还耗内存,此时我们可以使用for循环处理。

示列:

 1 #/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 #Author:W-D
 4 f=open("test","r+",encoding="utf-8")
 5 for line in f:#一行一行循环读取
 6     print(line.strip())#打印
 7 
 8 结果:
 9 You were the shadow to my light
10 Did you feel us
11 Another Star
12 You fade away
13 Afraid our aim is out of sight
14 Wanna see us
15 Alive
16 Where are you now

 

关于with

为避免我们打开了文件进行操作以后没有关闭,使用with打开文件会自动调用close()方法关闭文件,同时在python2.7以后with也提供了同时打开多个文件的上下文管理。

示列:修改文件

1 #/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 #Author:W-D
4 with open("test","r",encoding="utf-8") as f1,open("new.txt","w",encoding="utf-8") as f2:
5     for line in f1:
6         f2.write(line)#将f1(test)文件内容写入到f2(new.txt)中

 

python基础3

原文:http://www.cnblogs.com/wdliu/p/6267494.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!