码迷,mamicode.com
首页 > 其他好文 > 详细

2 文件操作

时间:2018-01-14 10:57:04      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:文件路径   文件   chdir   相对   error   ror   特色   ike   找不到   

在Python世界中,文件也是一种数据类型。文件这个变量指向的是本地的文件

 

文件的声明由全局函数open(file_name [, access_mode][, buffering])完成,该函数有三个参数:

  file_name:文件路径+文件名  

  access_mode:操作模式

  buffering:编码方式

 
文件路径:
  绝对路径的方式: ‘c:\\path\\data.txt‘  或  r‘c:\path\data.txt‘
       相对路径的方式: ‘data.txt‘  系统会在当前的系统环境变量中的路径下去找,所以要用相对路径的方式,就得确保文件是放在这个路径下的,不然就找不到了
       一般情况下还是用绝对路径吧。更清晰,不容易出错。
 
操作模式:
针对两大类文件:文本文件(unicode字符串),二进制文件(字节)
  文本文件: 
      ‘r‘  : 表示以只读的方式操作当前的文件
      ‘w‘ : 表示以写入的方式操作当前的文件
      ‘rw‘ : 表示以读和写的方式操作当前的文件,会覆盖之前的内容
      ‘a‘ : 打开文本,在文本中追加一些内容。
 
  二进制:
    ‘rb‘ : 表示以读的方式操作当前的文件
      ‘wb‘ : 表示以写入的方式操作当前的文件
      ‘rwb‘ : 表示以读和写的方式操作当前的文件
      ‘ab‘ : 打开文本,在文本中追加一些内容
 
 
基本文件读写操作
 1 >>> #先在桌面创建一个文件my_python.txt文件,编辑内容:我爱python
 2 >>> #C:\Users\dddd\Desktop\mypython.txt
 3 >>> #创建该文件的文件对象
 4 >>> f = open(rC:\Users\dddd\Desktop\mypython.txt,r,encoding=UTF-8)
 5 
 6 >>> #看看文件对象的类型
 7 >>> type(f)
 8 <class _io.TextIOWrapper>
 9 
10 >>> # 一次性读出文件中的所有内容
11 >>> f.read()
12 \ufeff我爱python
13 >>>
14 >>> type(f.read())
15 <class str>
16 >>> # 可见f.read()读取的文件内容是转化成字符串的
17 >>>
18 >>> f.read()
19 ‘‘
20 >>> #什么情况,为什么再次来读文件内容返回空字符串?
21 >>> #文件内部有一个指针,read()从头开始读,一直读到最后结束,指针就在文件末尾的位置。所以再调用read()方法,发现已经没有什么可读了。
22 >>> #有两种方法可以重新读取出文件内容
23 >>> #方法 1 再创建一个该文件的文件对象,用新的文件对象读取文件中的内容
24 
25 >>> #方法 2 把指针重新移到文件的开头,调用seek(),将指针移到第一个字符的位置
26 >>> #把指针移动到文件开头
27 >>> f.seek(0)
28 0
29 >>> #seek()会返回移动指针后指针的位置
30 >>> f.read()
31 \ufeff我爱python
32 >>> #看到了吧,把文件的指针移动到文件开头,又可以读取文件内容了
33 >>>
34 >>> #强烈建议大家,文件对象用完之后,明确地关闭文件链接
35 >>> f.close()

 

深入学习文件读操作

 1 >>> f = open(rC:\Users\dddd\Desktop\mypython.txt,r,encoding=UTF-8)
 2 >>> f.read()
 3 \ufeff我爱python\n全会由中央纪律检查委员会常务委员会主持。\n全会以新时代中国特色社会主义思想为指导,\n全面贯彻落实党的十九大精神,\n研究部署2018年纪检监察工作,\n审议通过了赵乐际同志代表中央纪委常委会所作\n的《以新时代中国特色社会主义思想为指导\u3000坚定不移落实党的十九大全面从严治党战略部署》工作报告。
 4 >>> #read()方法是直接把文件中的所有内容作为一个字符串返回的,当文件内容较少时无所谓,但是文件内容比较多,处理速度可能就会很慢
 5 >>> 
 6 >>> # 另外一个读取方法,readlines(),读取文件所有的行,默认把整个文件以行为单位进行切割,返回切割后作为列表的元素返回列表
 7 >>> f.seek(0)
 8 0
 9 >>> f.readlines()
10 [\ufeff我爱python\n, 全会由中央纪律检查委员会常务委员会主持。\n, 全会以新时代中国特色社会主义思想为指导,\n, 全面贯彻落实党的十九大精神,\n, 研究部署2018年纪检监察工作,\n, 审议通过了赵乐际同志代表中央纪委常委会所作\n, 的《以新时代中国特色社会主义思想为指导\u3000坚定不移落实党的十九大全面从严治党战略部署》工作报告。]
11 >>> #可以把f.readlines()返回的列表指定一个列表名
12 >>> f.seek(0)
13 0
14 >>> l = f.readlines()
15 >>> #接下来对列表l进行操作就行了,跟没文件对象什么事了
16 >>> #readlines()还是存在一次性返回文件所有内容的情况,若文件较大,会影响运行速度
17 >>> 
18 >>> #readline()函数是逐行读取文件内容 ,非常适合读取大文件,节省内存,调用一次就会读取文件的一行并以字符串的形式返回
19 >>> 
20 >>> f.seek(0)
21 0
22 >>> f.readline()
23 \ufeff我爱python\n
24 >>> f.readline()
25 全会由中央纪律检查委员会常务委员会主持。\n
26 >>> 
27 >>> #当然还是有很多应用场景需要把文件用readlines()按行拆分列表,然后会列表中的每个元素进行处理
28 
29 >>> 
30 >>> #由于文件对象f是可迭代对象,可以直接遍历获取文件内容
31 >>> #这样就不用把文件读取到列表中,因为文件太大,比较消耗内存
32 >>> f.seek(0)
33 0
34 >>> for line in f:
35     print(line)
36 
37     
38 我爱python
39 
40 全会由中央纪律检查委员会常务委员会主持。
41 
42新时代中国特色社会主义思想为指导,
43 
44 全面贯彻落实党的十九大精神,
45 
46 研究部署2018年纪检监察工作,
47 
48 审议通过了赵乐际同志代表中央纪委常委会所作
49 
50 的《新时代中国特色社会主义思想为指导 坚定不移落实党的十九大全面从严治党战略部署》工作报告。
51 >>> 

 

深入学习文件写操作

 

 1 >>> import os
 2 >>> #获取当前工作目录
 3 >>> os.getcwd()
 4 C:\\Users\\dddd\\AppData\\Local\\Programs\\Python\\Python35
 5 >>> #如果我文件没有放在这个目录下,想要创建一个文件对象就必须用绝对路径
 6 >>> #有时候为了少写一些路径,可以直接把工作目录切换到文件所在的路径
 7 >>> 
 8 >>> #将工作目录切换到桌面
 9 >>> #桌面的路径:C:\Users\dddd\Desktop\
10 >>> os.chdir(rC:\Users\dddd\Desktop\‘)
11      
12 SyntaxError: EOL while scanning string literal
13 >>> os.chdir(rC:\Users\dddd\Desktop)
14 >>> f = open(mypython.txt,w,encoding=utf-8)
15 >>> 
16 >>> # 写入方法 1 write()  一次只写入一行,w模式会覆盖之前文件中的内容
17 >>> f.write(I love python)
18 13
19 >>> #write()函数会返回本次向文件中写入了多少个字节
20 >>> 
21 >>> f.close()
22 >>> #关闭文件链接,将缓存中的内容写入到硬盘上
23 >>> 
24 >>> #写入方法 2 write() 一次性写入多行,实现准备一个list,每一行要写入文件的内容作为list的一个元素
25 >>> l = [Mark,Tony,Marry,Mike,Jack]
26 >>> f = open(mypython.txt,w,encoding=utf-8)
27 >>> f.writelines(l)
28 >>> #到这里,写入操作已经完成,但实际上只是写入到缓存,除了关闭链接将缓存中的内容刷新到硬盘中,还可以用flush()函数,在不关闭文件链接的情况下将缓存中的内容刷新到硬盘中
29 >>> f.flush()
30 >>> f.close()
31 >>> 
32 >>> #折腾了半天,看看现在文件中的内容是什么
33 >>> f = open(mypython.txt,r,encoding=utf-8)
34 >>> f.read()
35 MarkTonyMarryMikeJack
36 >>> #咦???我实现多行显示这几个名字的,怎么都显示在一行上了?
37 >>> f.close()
38 >>> 
39 >>> #看来是用writelines()函数时,需要手工为没一行内容后加上换行符 \n
40 >>> 
41 >>> l
42 [Mark, Tony, Marry, Mike, Jack]
43 >>> ll = [a + \n for a in l]
44 >>> f = open(mypython.txt,w,encoding=utf-8)
45 >>> l
46 [Mark, Tony, Marry, Mike, Jack]
47 >>> ll = [a + \n for a in l]
48 >>> f.writelines(ll)
49 >>> f.flush()
50 >>> f.close()
51 >>> 
52 >>> #再看看文件的写入效果
53 >>> f = open(mypython.txt,r,encoding=utf-8)
54 >>> f.read()
55 Mark\nTony\nMarry\nMike\nJack\n
56 >>> 
57 >>> 
58 >>> # 写入方法 3 如果想在原文件的基础上追加一些内容,可用a模式
59 >>> f.close()
60 >>> f = open(mypython.txt,a,encoding=utf-8)
61 >>> f.writelines([John])
62 >>> f.close()
63 >>> 

 

上下文语法

 

 1 >>> #为了避免忘写close(),可以用上下文的语法,通过一个特定的代码段,将一系列的操作封装在上下文环境中,当环境结束时,会自动调用close()函数
 2 >>> with open(mypython.txt,a,encoding=utf-8) as f:
 3     f.write(I Love 广东亿迅)
 4 
 5     
 6 11
 7 >>> 
 8 >>> #再来看看文件中的内容情况
 9 >>> with open(mypython.txt,r,encoding=utf-8) as f:
10     f.read()
11 
12     
13 Mark\nTony\nMarry\nMike\nJack\nJohnI Love 广东亿迅
14 >>> 
15 #这个上下文的语法很实用,比如数据库的操作连接,网络连接等,自动释放资源,很方便

2 文件操作

标签:文件路径   文件   chdir   相对   error   ror   特色   ike   找不到   

原文地址:https://www.cnblogs.com/avention/p/8280336.html

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