一、3 种模式

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

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

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

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

二、文件处理模式b模式

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

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

三、文件处理方式

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

seek 的另一种用法:

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

四、for循环

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

x='hello'
iter_test=x.__iter__() # 将 x 转换为可迭代对象,“字符串”,“列表”, “元组”,“字典”,“集合”都能转换 print(iter_test)
print(iter_test.__next__()) # h
print(iter_test.__next__()) # e
print(iter_test.__next__()) # l
print(iter_test.__next__()) # l
print(iter_test.__next__()) # o
print(iter_test.__next__()) # 报错 y = ('s','d','f')
y1 = y.__iter__()
print(y1.__next__()) # s 有序
print(y1.__next__()) # d
print(y1.__next__()) # f u = {'a','b'}
u1 = u.__iter__()
print(u1.__next__()) # b 无序
print(u1.__next__()) # a v = {'A':12,'B':34}
v1 = v.__iter__()
print(v1.__next__()) # B 无序
print(v1.__next__()) # A

while 循环也可实现:

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

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

l=['die','erzi','sunzi','chongsunzi']
diedai_l = l.__iter__() while True:
try:
print(diedai_l.__next__())
except StopIteration:
# print('迭代完毕了,循环终止了')
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. Shell脚本 (三) 条件判断 与 流程控制

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 六.条件判断 1.基本语法 [ condition ](注意condition 前后要有空格) 注意:条 ...

  2. Java实现第八届蓝桥杯青蛙跳杯子

    青蛙跳杯子 题目描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里 ...

  3. Linux帮助命令man详解

    命令man详解 命令man,可以获得命令(使用whatis命令可以得到一个命令的简短介绍,可以使用:命令 --help 来获得命令的选项说明)或配置文件的帮助信息(可以使用apropos命令仅查看配置 ...

  4. 小师妹学JavaIO之:Buffer和Buff

    目录 简介 Buffer是什么 Buffer进阶 创建Buffer Direct VS non-Direct Buffer的日常操作 向Buffer写数据 从Buffer读数据 rewind Buff ...

  5. 数据误操作,删库跑路?教你使用ApexSQLLog工具从 SQLServer日志恢复数据!

    前几天同事不小心误操作,将SQLServer库的一张表的一个状态字段给刷成了一个统一状态,由于是update执行所以原来的相关状态无法确定.发生这种事情的时候我的小伙伴背后 一凉,估计心里里面想这怕是 ...

  6. 8、react 高阶组件

    1.高阶组件:封装 高阶组件使用得是react得一种模式,增强现有组件得功能 一个高阶组件就是一个函数,这个函数接收得是组件类作为参数得,并且返回得是一个新组件,再返回得新组件中有输入参数组件不具备得 ...

  7. SQL Msg 18054, Level 16, State 1

    今天接到一个看起来很简单的任务--修改数据库中的一项数据.听起来很简单吧. 在网上搜索了一下,很快就拼凑出了相应的 SQL 语句: UPDATE [suivi].[dbo].[numSerie]SET ...

  8. @codechef - JADUGAR2@ Chef and Same Old Recurrence 2

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 定义 dp 序列: \[dp(1) = K\\ dp(n) = ...

  9. C# 9.0 新特性之模式匹配简化

    阅读本文大概需要 2 分钟. 记得在 MS Build 2020 大会上,C# 语言开发项目经理 Mads Torgersen 宣称 C# 9.0 将会随着 .NET 5 在今年 11 月份正式发布. ...

  10. Spring:BeanDefinition&PostProcessor不了解一下吗?

    水稻:这两天看了BeanDefinition和BeanFactoryPostProcessor还有BeanPostProcessor的源码.要不要了解一下 菜瓜:six six six,大佬请讲 水稻 ...