码迷,mamicode.com
首页 > 编程语言 > 详细

python基础篇08-文件操作

时间:2018-01-23 13:13:30      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:安全性   dep   创建   数据   操作系统   系统默认   用途   赋值   不能   

文件操作基本流程

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

   现有文件如下:

1 昨夜寒蛩不住鸣。
2 惊回千里梦,已三更。
3 起来独自绕阶行。
4 人悄悄,帘外月胧明。
5 白首为功名,旧山松竹老,阻归程。
6 欲将心事付瑶琴。
7 知音少,弦断有谁听。

  对上述文件进行操作:

1 f = open(小重山‘,‘r‘,encoding=‘utf8‘) #打开文件,读模式
2 data=f.read()#获取文件内容
3 print(data)
4 f.close() #关闭文件

 

  注意 if in the win,小重山文件是utf8保存的,打开文件时open函数是通过操作系统打开的文件,而win操作系统默认的是gbk编码,所以直接打开会乱码,需要f=open(‘小重山‘,encoding=‘utf8‘)。

 

文件打开模式

 1 ========= ===============================================================
 2     Character Meaning
 3     --------- ---------------------------------------------------------------
 4     r       open for reading (default)
 5     w       open for writing, truncating the file first  #文件如果不存在就会创建一个文件;创建文件对象时就会将文件中的内容清空。
 6     x       create a new file and open it for writing
 7     a       open for writing, appending to the end of the file if it exists
 8     b       binary mode
 9     t       text mode (default)
10     +       open a disk file for updating (reading and writing)
11     U       universal newline mode (deprecated)
12 ‘r+‘ 读写模式
13 ‘w+‘ 写读模式
14 ‘a+‘ 追加读模式
15 ========= ===============================================================

   r+:读是从0位置开始读,写是在文件最后位置写

 1 f=open(小重山,r+,encoding=utf8)
 2 f.write(岳飞)
 3 f.close()
 4 输出:
 5 昨夜寒蛩不住鸣。
 6 惊回千里梦,已三更。
 7 起来独自绕阶行。
 8 人悄悄,帘外月胧明。
 9 白首为功名,旧山松竹老,阻归程。
10 欲将心事付瑶琴。
11 知音少,弦断有谁听。岳飞

  w+:先清空文件,再写读,读写是从下例岳飞之后开始读写

 1 f=open(小重山,w+,encoding=utf8)
 2 print(f.readline())
 3 f.write(岳飞)
 4 print(f.readline())
 5 f.close()
 6 输出:
 7 昨夜寒蛩不住鸣。
 8 惊回千里梦,已三更。
 9 起来独自绕阶行。
10 人悄悄,帘外月胧明。
11 白首为功名,旧山松竹老,阻归程。
12 欲将心事付瑶琴。
13 知音少,弦断有谁听。
14 ------------------------------------------
15 岳飞

 

 

1 f=open(小重山,r+,encoding=utf8)
2 print(f.tell())    #查看此时光标的位置
3 print(f.readline())
4 f.write(岳飞)
5 print(f.tell())  #查看write之后光标的位置
6 f.seek(0)        #将光标移动到0的位置,为了能够查看文件中的内容
7 print(f.readline())
8 f.close()

 

 

  a+:光标默认在最后的位置。即写在文件最后开始写,读在文件最后开始读。

 

先介绍三种最基本的模式:

1 # f = open(‘小重山2‘,‘w‘) #打开文件
2 # f = open(‘小重山2‘,‘a‘) #打开文件
3 # f.write(‘莫等闲1\n‘)
4 # f.write(‘白了少年头2\n‘)
5 # f.write(‘空悲切!3‘)
6 # f.close() #文件关闭之前统一将内容写入磁盘

 

文件操作方法

  1.readline():

     技术分享图片

    技术分享图片

  2.readlines():

    输出:技术分享图片

    [‘昨夜寒蛩不住鸣。\n‘, ‘惊回千里梦,已三更。\n‘, ‘起来独自绕阶行。\n‘, ‘人悄悄,帘外月胧明。\n‘, ‘白首为功名,旧山松竹老,阻归程。

 

  3.一行一行的读取文件的内容

 1 f = open(小重山,r,encoding=utf8)
 2 for i in f.readlines():
 3     print(i.strip())
 4 
 5 输出:
 6 昨夜寒蛩不住鸣。
 7 惊回千里梦,已三更。
 8 起来独自绕阶行。
 9 人悄悄,帘外月胧明。
10 白首为功名,旧山松竹老,阻归程。
11 欲将心事付瑶琴。
12 知音少,弦断有谁听。

 

  4.在第6行添加iiiii:

1 f = open(小重山,r,encoding=utf8)
2
data=f.readlines()
3 f.close()
4 number=0
5 for i in data:
6 number+=1
7 if number == 6
8 i = ‘‘.join([i.strip(), ‘iiiii‘]) # 取代万恶的+
9 print(i.strip())

 

  优化:

1 ##########对于大数据文件,要用以下方式(the best way):
2 f = open(小重山‘,r‘,encoding=utf8)
3 number=0 4 for i in f:#这是for内部将f对象做成一个迭代器,用一行去一行。 5 number+=1 6 if number == 6: 7 i = ‘‘.join([i.strip(), ‘iiiii‘]) 8 print(i.strip())

 

   

  5.tell :取出光标的位置

1 f=open(小重山,a,encoding=utf8)
2 print(f.tell())#  取出光标位置,英文一个字符,中文3个字符(前提是使用utf8编码)
3 print(f.read(2))  #read,无论是中文还是英文都是一个字符
4 print(f.tell())

 

 

  6.seek:移动光标到指定的位置;作用:比如断点续传

1 f=open(小重山2,r,encoding=utf8)
2 f.seek(0)
3 print(f.read(4))

 

 

  7.flush:write是在文件关闭之前统一将内存中的数据写入磁盘,对于安全性要求高的,flush就有用途了,即立刻将内存中的数据写入磁盘,无需等到文件关闭。

    进度条例子:

1  import sys,time
2  for i in range(30):
3      sys.stdout.write("*")   #sys.stdout  终端输出对象
4      sys.stdout.flush()
5      time.sleep(0.1)
如果没有使用flush,将会在循环结束后统一将30个*一次从终端输出

 

     print的flush:

1  import sys,time
2  for i in range(30):
3      print(*,end=‘‘,flush=True)
4      time.sleep(0.1)

 

  8.truncate:截断(即删除)数据(注意不能再r模式下)

1 #在w模式下:先清空文件,再写,再截断
2 #在a模式下:直接将指定位置后的内容截断
3 f=open(小重山,w,encoding=utf8)
4 f.write(hello world)
5 f.truncate(5)
6 f.close()

 

 

如何在磁盘修改文件:

  常规思路:由于磁盘存储机制不能够实现

1  f=open(‘小重山‘,‘r+‘,encoding=‘utf8‘)
2  number=0
3  for line in f:
4      number+=1
5      if number==3:
6          f.write(alex)      

 

  r+:写都是在文件最后开始写

  只能采取重新创建一个文件的思路:

 1 f_read=open(小重山,r,encoding=utf8)
 2 f_write = open(小重山2,w,encoding=utf8)
 3 
 4 number=0
 5 for line in f_read:
 6      number+=1
 7      if number==5:
 8          line=‘‘.join([line.strip(),alex\n])
 9      f_write.write(line)
10 
11  f_read.close()
12  f_write.close()

 

   

文件操作之with操作:

  为了避免打开文件后忘记关闭,可以通过管理上下文,即:

1 with open(log,r) as f:
2         pass

 

 

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。

在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:

1 with open(log1) as obj1, open(log2) as obj2:
2     pass

 

 

 

  

 

python基础篇08-文件操作

标签:安全性   dep   创建   数据   操作系统   系统默认   用途   赋值   不能   

原文地址:https://www.cnblogs.com/lriwu/p/8330270.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!