鱼C论坛

 找回密码
 立即注册
查看: 1527|回复: 0

[技术交流] 《零基础入门学习Python》笔记 028文件1--- 因为懂你所以永恒

[复制链接]
发表于 2017-7-17 03:55:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
内容概要: 文件概念;文件打开f=open(‘’,’’);打开文件后就可以获得文件对象f,有了文件对象f就可以利用文件对象方法(f.read();f.readline();f.write();f.writelines();f.seek();f.tell())对文件进行处理;处理完文件之后记得将文件关闭close()。
0. 文件是指由创建者所定义的一组相关信息的集合。可简单划分为文本文件和二进制文件。文件形式上由文件名.扩展名组成;文件的处理过程为:输入 --> 处理 -->输出。
1. 文件的打开open('路径','打开方式'),成功打开一个文件后,会返回一个文件对象。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Character Meaning
    --------- ---------------------------------------------------------------
    'r'       open for reading (default)  (默认)打开为只读
    'w'      open for writing, truncating the file first 如果文件不存在会新建,已存在会覆盖。
    'x'       create a new file and open it for writing 如果文件不存在则新建,已存在会报错
    'a'       open for writing, appending to the end of the file if it exists
    'b'       binary mode
    't'       text mode (default)   (默认)打开为文本类型
    '+'       open a disk file for updating (reading and writing) 可读写模式,联合其他模式使用
    'U'       universal newline mode (deprecated)  通用换行符支持
注意路径的写法:(E盘下有个record.txt文件)
’E:\\record.txt’; ’E:/record.txt’; ’E://record.txt’;都可以,但’E:\record.txt’错误。
例如:
  1. >>> f=open('E:\\record.txt','rt')   # ’rt’为默认方式可省略
  2. >>> f                        # 返回f为一文件对象
  3. <_io.TextIOWrapper name='E:\\record.txt' mode='rt' encoding='cp936'>  
复制代码

2.  以下几个都是文件对象方法,调用文件对象方法来处理文件
3.  f.read(size=-1)  
    (1)功能:从文件中读取size个字符(注意是字符,不是字节)。参数不指定或负时读取剩余所有字符。
    (2)例如:
   
  1. >>> f.read(5)    # 读取前5个字符,这时文件指针后移至’小’的后面
  2. '小客服:小'
  3. >>> f.read(5)    # 在上一个指令文件指针位置后又读出了5个字符,文件指针继续后移5个字符。
  4. '甲鱼,今天'
  5. >>> f.read()     # 参数未设置,读出剩余所有字符
  6. '有客户问你有没有女朋友?\n小甲鱼:咦??\n小客服:我跟她说你有女朋友了!\n小甲鱼:。。。。。。\n小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"\n小甲鱼:然后呢?\n小客服:她买了两个,说发一个货就好~\n小甲鱼:呃。。。。。。你真牛!小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。\n小客服:滚!!!'
  7. >>> f.read()    #文件指针已经指到文件末尾,所以再读取,只能是空字符了’’.
  8. ''
复制代码

4.  f.tell()  
    (1)功能: 以字节数的形式返回当前文件指针位置。注意一个中文字符是两个字节。
    (2) 例如:重新打开E:/record.txt
   
  1. >>> f=open('E:\\record.txt','rt')
  2. >>> f.read(5)
  3. '小客服:小'
  4. >>> f.tell()      
  5. 9    # 之所以返回9是因为一个中文是2个字节,所以目前位置为2+2+2+1+2=9
复制代码

5.  f.seek(offset,from)
    (1)功能:移动文件指针,从from处移动offset个字节。from:0起始位置;1当前位置;2文件末尾。
    (2)例如:
   
  1. >>> f.seek(45,0)     # 从文件开头移动45个字节。
  2. 45
  3. >>> f.readline()      # 从45字节处打出一行
  4. '小甲鱼:咦??\n'
  5. >>> f.seek(46,0)     # 从文件开头移动46个字节
  6. 46
  7. >>> f.readline()   
  8. # 从46字节处打出一行为啥就出错了呢?原因字节45和46是中文’小’字。半个汉字无法打印。
  9. Traceback (most recent call last):
  10.   File "<pyshell#14>", line 1, in <module>
  11.     f.readline()
  12. UnicodeDecodeError: 'gbk' codec can't decode byte 0xe3 in position 4: illegal multibyte sequence
复制代码

6.  文件列表化,很简单,直接list(f),就可将文件内容放到列表中。
7.  迭代读取文本的每一行方法。
   
  1. >>> f.seek(0,0)    #定位文件指针至文件开头
  2. 0
  3. >>> for each_line in f:    # 迭代读取每一行
  4.             print(each_line)

  5. 小客服:小甲鱼,今天有客户问你有没有女朋友?
  6. 小甲鱼:咦??
  7. 小客服:我跟她说你有女朋友了!
  8. 小甲鱼:。。。。。。
复制代码


8.  f.write(str):将字符串写入文件并返回字符数; f.writeliens(seq) : 将字符串序列写入文件。
    注意:写文件必须确保打开方式为’w’,’x’,或’a’的方式。
     例如:
   
  1. >>> f1=open('E:/test.txt','w')        # 新建一个test.txt文件
  2. >>> f1.write('学习Python非常有趣!2017-07-16')   # 写入一句话
  3. 23                 #返回字符个数
  4. >>> f1.close()        #一定要关闭,不关闭看不到修改的内容

  5. >>> list1=[]         #定义一个列表用于存放文本序列
  6. >>> f=open('E:/record.txt')   #打开文本文件,只读
  7. >>> list1=list(f)       #将文本内容读入列表
  8. >>> list1
  9. ['小客服:小甲鱼,今天有客户问你有没有女朋友?\n', '小甲鱼:咦??\n', '小客服:我跟她说你有女朋友了!\n', '小甲鱼:。。。。。。'小客服:滚!!!']
  10. >>> f1=open('E:/test.txt','a')   #打开文件追加内容
  11. >>> f1.writelines(list1)        #将文本序列写入文件
  12. >>> f1.close()       #一定要关闭,不关闭看不到修改的内容
复制代码

9.  f.close(): 虽然python有垃圾回收机制,不关闭文件也不会像C语言中影响那么严重,但是为了避免因断电等意外造成文件未保存情况,还是要养成关闭文件的优雅习惯。

评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 22:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表