一、with open():

  1. 形式:with open('文件路径(文件名)','文件操作方式','字符编码方式')as 文件别名:
  2. with open操作可以将文件的内存释放交给with 管理,with操作结束后,自动释放内存中的文件,并将输出结果保存在硬盘中。
with open('文件', '模式', encoding='utf-8') as f:
# 操作
pass

二、文件读写方式汇总: 文件读写方式分为:主模式、从模式,主模式必须存在,从模式跟随主模式后面。

  1. 主模式:
    1.   r(read):只读模式
    2. w(write):写模式(文件不存在的时候创建新文件,在写入内容;文件存在时,清空文件,在写入内容)
    3. a(add):追加模式(该模式是写入模式,不清空文件,再原有文件基础上追加写入内容)
  2. 从模式:
    1.   t:文本操作模式,该模式是默认模式(rt == r,wt==w,at == a)
    2. b(byte)字节操作模式,该模式是操作非文本文件时使用,是采用二进制操作,使用该方式的时候不需要填写字符编码方式,默认是unicode编码
    3. +:可读可写
    4. x:创建文件,如果文件存在就报错(该模式很少用到)
    5. u:universal newline mode (deprecated)(很少用)
  3. 模式组合:
    1.   r+:不创建文件清空现有文件的可读可写,不可追加写入
    2.   w+:创建新文件或清空现有文件的可读可写,不可追加写入
    3. a+:创建文件或对现有文件不清空的情况下可读可写,追加写入
    4. rb:以二进制形式读取文件
    5. wb:可以创建空文件的二进制写入,不可追加写入
    6. ab:可以创建可以不清空文件的二进制写入,追加写入
    7. rb+:以二进制形式不创建文件清空现有文件的可读可写,不可追加写入
    8.   wb+:以二进制形式可以创建文件 或清空现有文件的可读可写,不可追加写入
    9.   ab+:以二进制形式创建文件或对现有文件不清空的情况下的可读可写,追加写入  

下面是python的官方解释文件操作模式:

========= ===============================================================
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)
========= ===============================================================

三、文件复制: 实质是对文件先读后写操作

with open('001.jpg', 'rb') as f1:
with open('100.jpg', 'wb') as f2:
for line in f1:
f2.write(line) # .newlines()读取一个字节,如果读到行文件的结束标识,就返回标识,否则返回None

四、非文本文件操作:(采用b模式)

# -*- coding: utf-8 -*-
with open('001.jpg', 'rb') as f1:
with open('100.jpg', 'wb') as f2:
for line in f1: # 此处传递的是该图片的二进制编码
f2.write(line)

五、游标操作(.seek(偏移量,偏移位置))

  1. 偏移量:移动的字节数(注意在utf-8的编码里,汉字为三个字节,所以移动的偏移量需为3的倍数,否则报错。)
  2. 偏移位置:0----是将游标移动至数据开头(即从文件开始位置偏移);1----从当前游标位置开始偏移;2----从文件末尾开始偏移;-1-----从当前游标位置往前偏移;-2----从文件末尾开始往前偏移。
with open('source.txt', 'rt', encoding='utf-8') as f:
d1 = f.read(10)
print(d1)
# 游标操作
f.seek(0,0)
d2 = f.read()
print(d2)
print(f.tell()) # 打印当前的游标位置
# # 游标写 会覆盖书写
with open('source.txt', 'rb') as f:
f.seek(11)
f.write(b'')

    类似于百度秒传案例,使用游标操作判断是否存在相同文件,如果存在则打印‘秒传’,不存在则继续慢慢上传的python实现。

#  在大文件中,开头|1/3|2/3|结尾,各取十个直接凭借成秒传的信息
# 形成秒传规则
data12 = b''
with open('001.jpg','rb') as f:
data = f.read() # 后期通过其他途径(获取文件总大小)
length = len(data)
# 开头
f.seek(0,0)
d1 = f.read(10)
# 1/3
f.seek(length//3,0)
d2 = f.read(10) # 2/3
f.seek(length//3*2,0)
d3 = f.read(10) # 末尾
f.seek(-10,2)
d4 = f.read(10) data12 = d1 + d2 + d3 + d4 data13 = b''
with open('100.jpg', 'rb') as f:
data = f.read() # 后期通过其他途径(获取文件总大小)
length = len(data)
# 开头
f.seek(0, 0)
data13 += f.read(10)
# 1/3
f.seek(length // 3, 0)
data13 += f.read(10) # 2/3
f.seek(length // 3 * 2, 0)
data13 += f.read(10) # 末尾
f.seek(-10, 2)
data13 += f.read(10) # 对比
if data13 == data12:
print('秒传成功')
else:
print('慢慢传')

day08--文件操作(2)的更多相关文章

  1. day08——文件操作

    day08 文件操作: open() :打开 f (文件句柄)= open("文件的路径(文件放的位置)",mode="操作文件的模式",encoding=&q ...

  2. day08文件操作的三步骤,基础的读,基础的写,with...open语法,文件的操作模式,文件的操作编码问题,文件的复制,游标操作

    复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int:int('10') | int('-10') | int('0') | float('-.5 ...

  3. day08 文件操作

    1.三种字符串: (1)u'' 普通字符串 ---> u'abc' ---> 默认的文本方式,以字符作为文本的输出方式 (2)b'' 二进制字符串 ---> b'ASCII码' -- ...

  4. day08文件操作

    今日内容 文件操作 内容详细 1.打开文件 1.open("作业讲解.py",mode="r",encoding="utf-8") 2.文件 ...

  5. Python集训营45天—Day08 (文件操作)

    目录 1. 文件操作介绍 2. 文件的读写 2.1 文本文件 2.2 二进制文件 2.3 JSON文件 3. 文件的定位,重命名和删除 4. 文件夹的相关操作 1. 文件操作介绍 大家应该听说过一句话 ...

  6. python day08 文件操作

    2019.4.8 S21 day08笔记总结 一.进制 对于计算机而言无论是文件存储 / 网络传输数据本质上都是:二进制(010101010101),如:电脑上存储视频/图片/文件都是二进制: QQ/ ...

  7. Python:Day08 文件操作

    能调用方法的一定是对象! 文件的操作分为三步: 1.打开文件 2.操作文件 3.关闭文件 f= open('小重山','r',encoding='utf8') #以读的方式打开一个文件,如果文件不存在 ...

  8. 铁乐学Python_day08_文件操作

    一.[基本的文件操作] 参数: 1.文件路径: 2.编码方式: 3.执行动作:(打开方式)只读,只写,追加,读写,写读! #1. 打开文件,得到文件句柄并赋值给一个变量 f = open('E:/Py ...

  9. day08(字符编码,字符与字节,文件操作)

    一,复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int: int('10') | int('-10') | int('0') | float(' ...

  10. day08 python文件操作

    day08 python   一.文件操作     1.文件操作的函数         open(文件名, mode=模式, encoding=字符集)       2.模式: r, w, a, r+ ...

随机推荐

  1. BZOJ 2463: [中山市选2009]谁能赢呢?(智商)

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3110  Solved: 2250[Submit][Status][Discuss] Descript ...

  2. 关于Object数组强转成Integer数组的问题:Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

    一.当把Object数组,强转的具体的Integer数组时,会报错. 代码如下: //数组强转报错演示 Object[] numbers = {1,2,3}; Integer[] ints = (In ...

  3. Human Motion Analysis with Wearable Inertial Sensors——阅读3

    Human Motion Analysis with Wearable Inertial Sensors——阅读3 四元数方向滤波器 之前的研究开发了一种自适应增益互补滤波器,并结合高斯 - 牛顿优化 ...

  4. Cesium-知识点(Viewer)

    Cesium之Viewer的构造(转自:https://blog.csdn.net/zhy905692718/article/details/78865107) Viewer属于Cesium的控件部分 ...

  5. 归并排序(MergeSort)和快速排序(QuickSort)的一些总结问题

    归并排序(MergeSort)和快速排序(QuickSort)都是用了分治算法思想. 所谓分治算法,顾名思义,就是分而治之,就是将原问题分割成同等结构的子问题,之后将子问题逐一解决后,原问题也就得到了 ...

  6. loadrunner 脚本优化-参数化之场景中的参数化取值

    脚本优化-场景中的参数化取值 by:授客 QQ:1033553122   Action() { lr_eval_string("{NewParam}"); lr_eval_stri ...

  7. Thrift的C++服务端(线程池和非阻塞)模式

    非阻塞模式 #include "RpcServiceHandler.h" #include <thrift/concurrency/ThreadManager.h> # ...

  8. elasticsearch及head插件安装与配置

    1. 环境软件版本说明 系统:ubuntu14.04.1 JDK:1.8 elasticsearch:5.5.2 node:9.11.1 elasticsearch:5.X 2. 环境软件下载说明 1 ...

  9. matlab练习程序(点云下采样)

    点云处理有时因为数据量太大,我们需要对其进行下采样. 这里的方法是先将点云填入固定大小的三维网格中,然后每个网格中选一个点生成新的点云. 新点云即为下采样后的点云. 这里使用斯坦福兔子作为测试点云. ...

  10. Centos7开启ssh免密码登录

    1.输入命令:cd .ssh进入rsa公钥私钥目录(清空旧秘钥) 2.在当前目录下执行ssh-keygen -t rsa,三次回车后生成新的公钥(id_rsa.pub)私钥(id_rsa)文件(每个节 ...