一、3 种模式

r: 只读模式,        r+: 读写模式,覆盖开头内容

w: 写模式,全覆盖 (如果是没有的文件则重新创建空文件)

a+:  读写模式,从最开头写,覆盖开头内容 (如果是没有的文件则重新创建空文件)

  1. f=open('陈粒1','r',encoding='utf8')
  2. #data=f.read() 光标跑到文件最末尾,之后执行readline,读到的为空
  3. #print(data)
  4. print(f.readable())
  5. print('第1行',f.readline(),end='') # 每行读取的文件末尾有一个'\n'
  6. print('第2行',f.readline(),end='')
  7. print('第3行',f.readline())

二、文件处理模式b模式

因为r, w, a模式默认都是读写的 txt 模式的文件,但是有的文件,比如视频文件,就需要2进制模式读写,因此要用rb, wb, ab模式。

  1. f1=open('test11.py','rb') #b的方式不能指定编码
  2. data=f1.read()
  3. print(data) # b'11111\r\n22222\r\n33333\r\n44444\r\n55555' windows中的回车为'\r\n'
  4. f1.close()
  5. # #bytes---------decode---------》'字符串'
  6.  
  7. f2=open('test22.py','wb') #b的方式不能指定编码
  8. f2.write(bytes('1111\n',encoding='utf-8')) #(编码)'字符串'---------encode---------》bytes
  9. # 将字符串'1111\n',通过utf-8编码,转换成二进制形式
  10. f2.write('杨件'.encode('utf-8'))
  11. f2.close()
  12.  
  13. f3=open('test22.py','ab') #b的方式不能指定编码
  14. f3.write('asdf'.encode('utf-8'))
  15. f3.close()
  16. # test22的最后内容为: #1111
  17. #杨件asdf

三、文件处理方式

  1. # test11.py 的内容是: 11111
  2. #
  3. #
  4. f = open('test11.py','r+',encoding='utf-8') # tell(),读取当前光标位置,以字节为单位
  5. print(f.tell()) #
  6. f.readline()
  7. print(f.tell()) #
  8. f.readline()
  9. print(f.tell()) #
  1. # test11.py 的内容是: 1111111111
  2. #
  3. #
  4. f = open('test11.py','r+',encoding='utf-8') # tell(),读取当前光标位置,以字节为单位
  5. print(f.tell()) # 0 seek(n),光标放到第 n 个字节的位置
  6. f.readline()
  7. print(f.tell()) #
  8. f.seek(2)
  9. print(f.tell()) #
  10. f.write('你好')
  11. f.seek(8)
  12. print(f.tell()) #
  13. f.write('你好')
  14. # 最后test11.py 的内容是: 11你好你好2222222
  15. #
  16. # 因为“你好你好”占了12个字符,所以用去了第一行的回车,和第二行的 3 个‘2’。
  1. # test11.py 的内容是: 1111111111
  2. # 2222222222
  3. # 333
  4. f = open('test11.py','r+',encoding='utf-8') # read(n), 读取n个字符
  5. data = f.read(13)
  6. print(data) #
  7. # 22 回车代表一个字符
  1. # test11.py 的内容是: 你好
  2. # 2222222222
  3. # 333
  4. f = open('test11.py','r+',encoding='utf-8') # truncate(n), 截取n个字节
  5. f.truncate(9)
  6. # 最后test11.py 的内容是: 你好
  7. # 22

seek 的另一种用法:

  1. 从上次光标的位置往后推移 n 个字节
    f=open('test11.py','rb') # 需要以 b 的方式 seek
  2. print(f.tell()) #
  3. f.seek(10,1)
  4. print(f.tell()) #
  5. f.seek(3,1)
  6. print(f.tell()) #
  1. 读取文件的最后一行:
    f = open('test11.py','rb')
  2. for i in f:
  3. offs=-10
  4. while True:
  5. f.seek(offs,2) # 从文件的末尾往上找10个字节
  6. data=f.readlines()
  7. if len(data) > 1:
  8. print('文件的最后一行是 %s' %(data[-1].decode('utf-8')))
  9. break
  10. offs*=2
  11. f.close()

四、for循环

for 循环是将 列表、元组、集合、字典、字符串、文件 变为可迭代对象,然后一个一个遍历读出,可以节省内存

  1. x='hello'
  2. iter_test=x.__iter__() # 将 x 转换为可迭代对象,“字符串”,“列表”, “元组”,“字典”,“集合”都能转换
  3.  
  4. print(iter_test)
  5. print(iter_test.__next__()) # h
  6. print(iter_test.__next__()) # e
  7. print(iter_test.__next__()) # l
  8. print(iter_test.__next__()) # l
  9. print(iter_test.__next__()) # o
  10. print(iter_test.__next__()) # 报错
  11.  
  12. y = ('s','d','f')
  13. y1 = y.__iter__()
  14. print(y1.__next__()) # s 有序
  15. print(y1.__next__()) # d
  16. print(y1.__next__()) # f
  17.  
  18. u = {'a','b'}
  19. u1 = u.__iter__()
  20. print(u1.__next__()) # b 无序
  21. print(u1.__next__()) # a
  22.  
  23. v = {'A':12,'B':34}
  24. v1 = v.__iter__()
  25. print(v1.__next__()) # B 无序
  26. print(v1.__next__()) # A

while 循环也可实现:

  1. l = ['a','s','d']
  2. index=0
  3. while index < len(l):
  4. print(l[index])
  5. index+=1

for 循环实际是这样运行的:

  1. l=['die','erzi','sunzi','chongsunzi']
  2. diedai_l = l.__iter__()
  3.  
  4. while True:
  5. try:
  6. print(diedai_l.__next__())
  7. except StopIteration:
  8. # print('迭代完毕了,循环终止了')
  9. break

day18__文件操作的更多相关文章

  1. 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档

    .net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...

  2. 野路子出身PowerShell 文件操作实用功能

    本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...

  3. Node基础篇(文件操作)

    文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...

  4. 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)

    ========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...

  5. SQL Server附加数据库报错:无法打开物理文件,操作系统错误5

    问题描述:      附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...

  6. 通过cmd完成FTP上传文件操作

    一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...

  7. Linux文件操作的主要接口API及相关细节

    操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...

  8. C语言的fopen函数(文件操作/读写)

    头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为:    FILE * fopen(const char * path, c ...

  9. Python的文件操作

    文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...

随机推荐

  1. 【Hadoop】mapreduce环形缓冲区

    mapreduce过程解析 数据在map中怎么写入磁盘? 数据:经过map逻辑处理过后的数据(key,value)- 磁盘:本地磁盘 环形缓冲区 1.为什么要环形缓冲区? 答:使用环形缓冲区,便于写入 ...

  2. HTML元素跟随鼠标一起移动,网页中回到顶部按钮的实现

    对象跟随鼠标: 1.对象css设置绝对定位position: absolute; 2.获取鼠标坐标: 3.通过鼠标坐标计算出对象坐标位置,并设置为css定位的位置: document.onmousem ...

  3. Java实现 洛谷 P1060 开心的金明

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱 ...

  4. (Java实现) 友好城市

    1263:[例9.7]友好城市 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 1867 通过数: 1032 [题目描述] Palmia国有一条横贯东西的大河,河有笔直的南北两岸, ...

  5. Java实现 LeetCode 481 神奇字符串

    481. 神奇字符串 神奇的字符串 S 只包含 '1' 和 '2',并遵守以下规则: 字符串 S 是神奇的,因为串联字符 '1' 和 '2' 的连续出现次数会生成字符串 S 本身. 字符串 S 的前几 ...

  6. Java实现 蓝桥杯VIP 算法提高 连接乘积

    算法提高 连接乘积 时间限制:1.0s 内存限制:256.0MB 问题描述 192这个数很厉害,用它分别乘以1.2.3,会得到: 192 x 1 = 192 192 x 2 = 384 192 x 3 ...

  7. java实现第四届蓝桥杯黄金连分数

    黄金连分数 题目描述 黄金分割数0.61803- 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜, ...

  8. cocos2dx Android 使用ant 批量打包

    参考文章: 例子:http://www.2cto.com/kf/201305/208139.html http://blog.csdn.net/ljb_blog/article/details/127 ...

  9. Grafana邮箱告警

    1.grafana-server 配置 smtp 服务器 vim /etc/grafana/grafana.ini #修改一下内容 ################################## ...

  10. AWS 创建redis 集群模式遇到的问题

    问题描述 前几天在aws 平台创建了Redis 集群模式,但是链接集群的时候发现无法连接,返回信息超时. 通过参数组创建redis的时候提示报错:Replication group with spec ...