今日目录:

一、文件处理

  1. 1.什么是文件
  2. 2.为何用文件
  3. 3.如何用文件
  4. 4.文件操作
  5. 5.常用方法
  6. 6.文件内指针的移动
  7. 7.with的使用

一、文件处理

1. 什么是文件

  1. 文件是操作系统为用户/应用程序提供的一种操作硬盘的抽象单位

2. 为何要用文件

  1. 用户/应用程序对文件的读写操作会由操作系统转换称具体的硬盘操作
  2. 所以用户/应用程序可以通过简单的读/写文件来间接地控制复杂的硬盘的存储操作,实现将内存中的数据用具保存到硬盘中

3. 如何用文件

  1. f = open(...)#打开文件,拿到一个文件对象f,f就相当于
  2. 绝对地址: open(r"D:\sh.txt")
  3. 相对地址: .\ # 当前目录下
  4. #向操作系统发送请求,要求操作系统打开文件
  5. f = openr"sh.txt",encoding="utf-8"
  6. f.read()
  7. 强调:一定要在程序结束前关闭打开的文件

4. 文件操作

4.1 主模式
  1. r:只读模式L(默认)
  2. 当文件不存在时,会报错
  3. 当文件存在时,文件指针指向文件的开头
  4. w:只写模式
  5. 当文件不存在时,新建一个空文档
  6. 当文件存在时,清空文件内容,文件指针跑到文件的开头
  7. info = ['egon:123\n','alex:456\n','lxx:lxx123']
  8. f.writelines(info) #将列表里面的数据,一行行的写进去(自动换行)
  9. a:追加 写模式
  10. 当文件不存在时,新建一个空文档,文件指针跑到文件的末尾
  11. 当文件存在时,文件指针跑到文件的末尾
  12. 在文件打开不关闭的情况下,连续的写入,下一次写入一定是基于上一次写入指针位置而继续的
  13. f.write()
  14. f.writelines()
4.2 文件操作从模式(必须与r/w/a连用)
  1. t:文本模式(默认的),一定指定encoding参数
  2. 优点:操作系统会将硬盘中的二进制数字解码成Unicode然后返回
  3. 强调:只针对文本文件有效
  4. b:二进制模式:一定不能指定encoding参数
  5. 优点:
  6. +:可读可写
  7. r+: 不会创建文件的可读可写
  8. w+:创建清空文件的可读可写
  9. a+:创建不清空文件(追加)的可读可写
  10. rb: 二进制读
  11. wb:创建清空文件的二进制写
  12. ab 创建不清空文件(追加)的二进制写
  13. rb+ | wb+ | ab+
  14. # ps: x:写模式,创建文件,如果文件以存在,就抛异常
  15. with open('000.txt', 'x', encoding='utf-8') as f:
  16. pass
4.3 案例
  1. # 需求:
  2. # 1.完成文本类型的文件复制:1.txt => 11.txt
  3. r = open('1.txt', 'r', encoding='utf-8')
  4. w = open('11.txt', 'w', encoding='utf-8')
  5. for line in r: # 遍历就是一行一行读 取读文件的流
  6. w.write(line)
  7. w.flush()
  8. w.close()
  9. r.close()

5. 常用方法

#掌握
  1. f.read() #读取所有内容,光标移动到文件末尾
  2. f.readline() #读取一行内容,光标移动到第二行首部
  3. f.readlines() #读取每一行内容,存放于列表中
  4. f.write('1111\n222\n') #针对文本模式的写,需要自己写换行符
  5. f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符
  6. f.writelines(['333\n','444\n']) #文件模式
  7. f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式
  8. f.flush() #立刻将文件内容从内存刷新到硬盘
#了解
  1. f.readable() #文件是否可读
  2. f.writable() #文件是否可写

6. 控制文件内指针的移动

6.1 方法
  1. f.seek() # seek(偏移量, 偏移位置)
  2. f.tell()
  3. f.read(n)
  4. f.truncate()
6.2 案例: 游标操作
  1. # 方法:seek(偏移量, 偏移位置)
  2. # 偏移量:移动的字节数,负数是结合模式1,2往前偏移
  3. # 偏移位置:
  4. # -- 0 - 从文件开始位置开始偏移 | 1 - 从当前游标位置开始偏移 | 2 - 从文件末尾开始偏移
  5. # b'你好1234567890'
  6. #游标读
  7. with open('source.txt', 'rb') as f:
  8. d1 = f.read(11)
  9. print(d1)
  10. # print(d1.decode('utf-8'))
  11. # 当前游标的位置
  12. print(f.tell())
  13. # 游标操作 - 从末尾位置开始
  14. f.seek(-3, 2)
  15. d2 = f.read()
  16. print(d2.decode('utf-8')) # 890
  17. # 游标操作 - 从当前位置开始
  18. f.seek(-3, 1)
  19. d2 = f.read()
  20. # print(d2.decode('utf-8')) # 34567890
  21. # 游标操作 - 从头开始
  22. f.seek(3, 0)
  23. d2 = f.read()
  24. # print(d2)
  25. print(d2.decode('utf-8')) # 好1234567890
  26. 游标写:会覆盖书写
  27. with open('source.txt', 'rb+') as f:
  28. f.seek(11)
  29. # print(f.read())
  30. f.write(b'000')
6.3 百度网盘秒传分析
  1. # 案例
  2. #以图片为例,按照一定规则从文件中摘取一些数据,
  3. #加工后通过与服务器端数据进行对比,如果数据一样则不需要传输,
  4. #直接将服务器内文件地址给用户即可
  5. with open('001.png', 'rb') as f:
  6. data = f.read()
  7. print(len(data))
  8. # 在大文件中,开头| 1/3 | 2/3 | 末尾 各取10个字节拼接成秒传的信息依据
  9. # 形成秒传规则
  10. tagData = b''
  11. with open('001.png', 'rb') as f:
  12. # 通过其他途径(sys模块)来获取文件总大小
  13. data = f.read()
  14. length = len(data)
  15. # 开头
  16. f.seek(0, 0)
  17. d1 = f.read(10)
  18. # 1/3
  19. f.seek(length // 3, 0)
  20. d2 = f.read(10)
  21. # 2/3
  22. f.seek(length // 3 * 2, 0)
  23. d3 = f.read(10)
  24. # 末尾
  25. f.seek(-10, 2)
  26. d4 = f.read(10)
  27. tagData = d1 + d2 + d3 + d4
  28. # 秒传依据
  29. print(tagData)
  30. newData = b""
  31. with open('001.png', 'rb') as f:
  32. data = f.read()
  33. length = len(data)
  34. f.seek(0, 0)
  35. newData += f.read(10)
  36. f.seek(length // 3, 0)
  37. newData += f.read(10)
  38. f.seek(length // 3 * 2, 0)
  39. newData += f.read(10)
  40. f.seek(-10, 2)
  41. newData += f.read(10)
  42. if newData == tagData:
  43. print('秒传成功')
  44. else:
  45. print('慢慢传去吧')

7. with:将文件的释放交给with管理

7.1 使用方法
  1. with open('1.txt', 'r', encoding='utf-8') as r,\
  2. open('source.txt', 'w', encoding='utf-8') as w:
  3. for line in r:
  4. w.write(line)
  5. w.flush()
  6. # w.close() 系统自动完成
  7. # r.close()
7.2 案例
  1. #完成文本文件的赋值
  2. # 边读边写赋值
  3. with open('source.txt', 'r', encoding='utf-8') as f1:
  4. with open('target.txt', 'a+', encoding='utf-8') as f2:
  5. for line in f1:
  6. f2.write(line)
  7. #完成非文本文件的赋值
  8. # 非文本文件,使用二进制读写,不设置encoding
  9. with open('333.mp4', 'rb') as f1:
  10. with open('666.mp4', 'wb+') as f2:
  11. for line in f1:
  12. f2.write(line)

Python 入门基础7 --文件操作的更多相关文章

  1. Python入门基础学习(文件与异常处理)

    Python基础学习笔记(七) 捕获异常的语法格式: 文件的基本操作: 打开文件 读.写文件 关闭文件 read方法 --读取文件: open函数的第一个参数是要打开的文件名(文件名区分大小写) 如果 ...

  2. python函数基础 与文件操作

    函数的定义 函数是通过赋值传递的,参数通过赋值传递给函数.def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: def function_name(arg1,arg2[,.. ...

  3. python入门三:文件操作

    一.文件操作 1.文件对象:和c一样,要想对一个文件进行操作,需要获取该文件的对象 f = open("xxx") # 打开文件并获取文件对象 f.xxx # 对文件进行某些操作 ...

  4. python入门基础:文件的读写

    文件的读写操作运用广泛,无论是何种语言都会涉及到文件的输入输出. 下面简单的总结一下文件的读写: 1:open()函数 f = open('workfile', 'w') 函数 open()返回文件的 ...

  5. Python 入门基础6 --字符编码、文件操作1

    今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...

  6. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  7. Python入门基础学习 一

    Python入门基础学习 一 Python下载及安装 下载地址:https://www.python.org/,选择最新的版本下载 稍等一会,安装完成. 简单语句 从idle启动Python:IDLE ...

  8. Python入门基础学习 二

    Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...

  9. python入门学习:3.操作列表

    python入门学习:3.操作列表 关键点:列表 3.1 遍历整个列表3.2 创建数值列表3.3 使用列表3.4 元组 3.1 遍历整个列表   循环这种概念很重要,因为它是计算机自动完成重复工作的常 ...

随机推荐

  1. PAT甲题题解-1044. Shopping in Mars (25)-水题

    n,m然后给出n个数让你求所有存在的区间[l,r],使得a[l]~a[r]的和为m并且按l的大小顺序输出对应区间.如果不存在和为m的区间段,则输出a[l]~a[r]-m最小的区间段方案. 如果两层fo ...

  2. PAT甲题题解-1105. Spiral Matrix (25)-(模拟顺时针矩阵)

    题意:给定N,以及N个数.找出满足m*n=N且m>=n且m-n最小的m.n值,建立大小为m*n矩阵,将N个数从大到下顺时针填入矩阵中. #include <iostream> #in ...

  3. PAT甲题题解-1121. Damn Single (25)-水题

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789787.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  4. python发送邮件脚本ssl 465端口

    #coding:utf8 from smtplib import SMTP_SSL from email.header import Header from email.mime.text impor ...

  5. 《LINUX内核设计与实现》第五章学习总结

    一.与内核通信 系统调用:用户控件进程和硬件设备之间添加了一个中间层 系统调用的三个主要作用: 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进程都运行在虚拟系统中,而在用户 ...

  6. 软件工程学习之小学四则混合运算出题软件 Version 1.00 设计思路及感想

    对于小学四则混合运算出题软件的设计,通过分析设计要求,我觉得为了这个软件在今后便于功能上的扩充,可以利用上学期所学习的<编译原理>一课中的LL1语法分析及制导翻译的算法来实现.这样做的好处 ...

  7. .net 开源组件推荐 之 StackExchange

    已经两年没更新过博客了!!! StackExchange,地址:https://github.com/StackExchange,开源的这些项目都是在StackOverflow线上使用的. 说起Sta ...

  8. Android map转json格式,附上Jackson包下载地址,导入过程

    android中的map转json,需要下载jackson包,下载地址: http://www.java2s.com/Code/Jar/j/Downloadjacksonall199jar.htm 下 ...

  9. 将ssh失败的用户放入hosts.deny中

    1.find / -name secure 找到linux系统安全日志文件 2.cp `find / -name secure` /tmp/`date +%F` 将secure文件复制出来 或者使用f ...

  10. [转帖]VMware Vsphere 6.0安装部署 (三) vCenter Server安装

    VMware Vsphere 6.0安装部署 (三) vCenter Server安装 2016年08月29日 14:59:14 dAng1r0Us 阅读数:72942   版权声明:本文为博主原创文 ...