一、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. java eclipse tomcat

    Port 8080 required by Tomcat v9.0 Server at localhost is already in use. The server may already be r ...

  2. ssm中的依赖配置

    <dependency> <groupId>org.springframework</groupId> <artifactId>spring-conte ...

  3. Java实现 LeetCode 473 火柴拼正方形

    473. 火柴拼正方形 还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法.不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到 ...

  4. Java实现 LeetCode 350 两个数组的交集 II(二)

    350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入 ...

  5. Java实现 蓝桥杯 一步之遥

    一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里. 矿车停在平直的废弃的轨道上. 他的面前是两个按钮,分别写着"F"和"B". 小明突然记起来,这两个 ...

  6. java实现识别复制串

    ** 识别复制串** 代码的目标:判断一个串是否为某个基本串的简单复制构成的. 例如: abcabcabc,它由"abc"复制3次构成,则程序输出:abc aa 由"a& ...

  7. java实现第七届蓝桥杯煤球数量

    煤球数量 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), - 如果一共有100层,共有多少个煤 ...

  8. java实现第四届蓝桥杯买不到的数目

    买不到的数目 题目描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友来买糖的时候,他就用这两种包装来组合.当然有些糖果数目是无法组合出来的,比如要买 ...

  9. Php-webdriver 的安装与使用教程

    Php-webdriver 是 Facebook 开发的基于 PHP 语言实现的 Selenium WebDriver 客户端组件,可以用它来操作浏览器.常见的操作包括:自动化测试.采集数据等. 安装 ...

  10. https如何进行加密传输

    客户端是没有证书的,也就没有公钥和私钥. SSL握手阶段,服务器把证书传输给客户端,同时也就传输了公钥(公钥是证书的一部分). 由客户端来对这个证书进行有效性认可,再由这个客户端来生成对称密钥. 对称 ...