python--文件处理

对文件操作流程:

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

基本操作:

1 f = open('lyrics') #打开文件
2 first_line = f.readline()
3 print('first line:',first_line) #读一行
4 print('我是分隔线'.center(50,'-'))
5 data = f.read()# 读取剩下的所有内容,文件大时不要用
6 print(data) #打印文件
7  
8 f.close() #关闭文件

打开文件的模式有:

  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
  • a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

"+" 表示可以同时读写某个文件

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

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

  • rb
  • wb
  • ab

 

常用操作:

 1 data = open("test",encoding="utf-8").read() #打开test文件,encoding为保存时的编码
 2 print(data)
 3 # ok
 4 # 正确打开了这个文件
 5 
 6 print(open("test",encoding="utf-8").readline()) #读一行
 7 #ok
 8 
 9 f = open("test",encoding="utf-8") #这样可以一行一行的读取
10 print(f.readline())
11 #ok
12 print(f.readline())
13 # 正确打开了这个文件
14 
15 f = open("lyrics",encoding="utf-8")
16 print(f.readline().strip()) #去掉换行符
17 #Somehow, it seems the love I knew was always the most destructive kind

 打印一个文件中的前三行:

 1 f = open("lyrics",encoding="utf-8")
 2 for index,line in enumerate(f.readlines()):   #取前三行,如果是大文件就不适用了,很占用内存
 3     if index <3 :
 4         print(line)
 5     else:
 6         break
 7 # Somehow, it seems the love I knew was always the most destructive kind
 8 #
 9 # 不知为何,我经历的爱情总是最具毁灭性的的那种
10 #
11 # Yesterday when I was young
12 
13 
14 f = open("lyrics",encoding="utf-8")
15 for line in f:  #一行行加载,输出所有内容
16     print(line.strip())
17 
18 
19 f = open("lyrics",encoding="utf-8") #这样就是一行一行打印,打印前三行,只能用这两种方法实现
20 line_nu = 0
21 for line in f:
22     if line_nu < 3:
23         print(line)
24         line_nu += 1
25     else:
26         break
27 # Somehow, it seems the love I knew was always the most destructive kind
28 #
29 # 不知为何,我经历的爱情总是最具毁灭性的的那种
30 #
31 # Yesterday when I was young

 

 1 #按照顺序进行操作
 2 f = open("myfile","w") #w=write,创建写模式
 3 f.write("我爱北京天安门")
 4 f.write("毛泽")
 5 f.close()
 6 #我爱北京天安门毛泽
 7 
 8 f = open("myfile","w") #w=write
 9 f.write("我爱北京天安门\n")
10 f.write("毛泽\n")
11 f.close()
12 # 我爱北京天安门
13 # 毛泽
14 
15 f = open("myfile","r+") #r+为读写模式
16 print(f.readline())
17 f.write("insert\n")
18 f.close()
19 # 我爱北京天安门
20 # 毛泽
21 # insert
22 
23 f = open("myfile","w+") #r+为写读模式
24 print(f.readline())
25 f.write("insert2\n")
26 f.close()
27 #insert2
28 
29 f = open("myfile","a+") #a+为追加读
30 print(f.readline())
31 f.write("insert2\n")
32 f.close()
33 # insert2
34 # insert2
35 
36 print(f.closed) #查看文件是否关闭
37 #True

 

 1 f = open("myfile","r+")
 2 f.write("hahaha\n")
 3 f.flush() #实时刷数据到硬盘
 4 
 5 f = open("lyrics","r+",encoding="utf-8")
 6 f.seek(10) #寻找第几个字符,移动到那个位置,只有文本可以seek
 7 print(f.readline())
 8 #t seems the love I knew was always the most destructive kind
 9 
10 f = open("lyrics","r+",encoding="utf-8")
11 f.seek(20)
12 f.truncate() #把光标位置后的内容都截断,对二进制文本有用,分布式下载可以把文件切成很多片
13 #Somehow, it seems th
14 
15 f = open("lyrics","r+",encoding="utf-8")
16 f.seek(20)
17 f.truncate(100) #保留从头开始100个字符,一般不用
18 # Somehow, it seems the love I knew was always the most destructive kind
19 # 不知为何,我经历的爱
20 
21 f = open("myfile","r+",encoding="utf-8")
22 data = ["xiaoming\n","dahong\n"] #向文件中写入一个字段后换行
23 f.writelines(data)
24 # xiaoming
25 # dahong

 

数据是存在硬盘个中的,当我们修改硬盘中的文件时,只能做到定长修改,因为改的是二进制,超出的则会覆盖,这就是为什么数据要加载到内存中

如果要删除一个大文件的其中两行,可以边读边加载,进行修改,写到一个新文件里,然后再删除原来的文件,这种方式浪费硬盘,如果全加载到内存中则浪费内存,这有这两种方式

posted @ 2016-10-26 14:00  wangmo  阅读(264)  评论(0)    收藏  举报