一、文件操作

1、wr模式结合

w = open('1.txt', 'w', encoding='utf-8')  # w:没有文件新建文件,有文件就清空文件
w.write('000\n')
w.flush() # 在写入大量数据,要及时处理内存空间,不然内存可能溢出导致数据丢失
w.write('111\n')
w.flush() # 最后一次flush()操作可以省略
w.writelines(['222\n', '333\n'])   # 一次性写入多行
w.write('')
w.write('')
w.close() # 1.将内存的的数据刷新到硬盘中;2.释放文件资源
# 需求:
# 完成文本类型的文件复制:1.txt => 11.txt r = open('1.txt', 'r', encoding='utf-8')
w = open('11.txt', 'w', encoding='utf-8')
for line in r: # 遍历就是一行一行读 取读文件的流
w.write(line)
w.flush()
w.close()
r.close()

2、文件操作模式

①主模式:

r 读           r+:不会创建文件的可读可写
w 写 w+:创建清空文件的可读可写
a 追加 a+:创建不清空文件的可读可写

②从模式:

t 文本操作(默认模式),要规定文本的编码格式utf-8
b 飞文本文件必须采用二进制模式处理,不需要规定文本的编码格式。
+ 可读可写
x 写,必须有自己的文件,否则会报错

③a为写模式,在原数据后追加写入新数据(追加写入)

# temp.txt
# with open('temp.txt', 'a', encoding='utf-8') as f:
f.write('new msg') # 结果为:111222333new msg

3、文件的复制:就是先读后写

①文本类型文件的复制

rw模式:

r = open('1.txt', 'r', encoding='utf-8')
w = open('11.txt', 'w', encoding='utf-8')
for line in r: # 遍历就是一行一行读 取读文件的流
w.write(line)
w.flush()
w.close()
r.close()

②with open完成文本文件的复制:边读边写。(with open 将文件的释放交给with管理,当with中逻辑结束后,系统自动释放文件)

with open('souurce.txt','r',encoding='utf-8') as f1:
with open('target.txt','a+',encoding='utf-8') as f2:
for line in f1:
f2.write(line)

③非文本文件的复制:从模式采用b模式,不需要关心编码问题

案例:复制source.mp4为target.mp4

with open('source.mp4', 'rb') as f1:
with open('target.mp4', 'wb') as f2:
for line in f1:
f2.write(line)

二、游标操作

必须在b模式下操作,seek中偏移的是字节

1、游标方法:seek(偏移量,偏移位置)

偏移量:移动的字节数

偏移位置:
1——从当前游标位置开始偏移
0——从文件开始位置开始偏移
2——从文件末尾开始偏移

2、游标的读写操作

①游标读
with open('source.txt', 'rb') as f:
d1 = f.read(11)
print(d1)
print(d1.decode('utf-8'))
# 当前游标的位置
print(f.tell())
# 游标操作 - 从末尾位置开始
f.seek(-3, 2)
d2 = f.read()
print(d2.decode('utf-8')) #
# 游标操作 - 从当前位置开始
f.seek(-3, 1)
d2 = f.read()
print(d2.decode('utf-8')) #
# 游标操作 - 从头开始
f.seek(3, 0)
d2 = f.read()
print(d2)
print(d2.decode('utf-8')) # 好1234567890 ②游标写:会覆盖书写
with open('source.txt', 'rb+') as f:
f.seek(11)
print(f.read())
f.write(b'')

3、案例

# 案例
with open('001.png', 'rb') as f:
data = f.read()
print(len(data)) # 在大文件中,开头| 1/3 | 2/3 | 末尾 各取10个字节拼接成秒传的信息依据
# 形成秒传规则
tagData = b''
with open('001.png', 'rb') as f:
# 通过其他途径(sys模块)来获取文件总大小
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)
tagData = d1 + d2 + d3 + d4
# 秒传依据
print(tagData) newData = b""
with open('001.png', 'rb') as f:
data = f.read()
length = len(data)
f.seek(0, 0)
newData += f.read(10)
f.seek(length // 3, 0)
newData += f.read(10)
f.seek(length // 3 * 2, 0)
newData += f.read(10)
f.seek(-10, 2)
newData += f.read(10) if newData == tagData:
print('秒传成功')
else:
print('慢慢传去吧')
 

day8 八、文件操作模式、文件的复制与文件游标操作的更多相关文章

  1. 如何禁止复制电脑文件到U盘、禁止U盘拷贝文件

    在公司局域网中,有时候我们处于保护电脑文件安全和商业机密的需要,会禁止局域网电脑使用U盘.禁用USB存储设备:或者禁止通过U盘复制电脑文件.禁止U盘拷贝公司电脑文件.那么,怎样实现呢?本文提供两种方法 ...

  2. python第六篇:Python复制超大文件、复制二进制文件

    Python文件复制 # 写程序实现复制文件的功能 # 要求: # 1. 源文件路径和目标文件路径需要手动输入 # 2. 要考虑文件关闭的问题 # 3. 要考虑复制超大文件的问题 # 4. 要能复制二 ...

  3. 文件IO——将文件dfs的文件内容第三个字节之后的内容复制到文件dfd中

    /* 使用文件IO将文件fds中的内容复制到文件fdd中去 1.创建两个文件描述符 2.使用open()方法分别以只读只写方式将文件描述符符文件连接 3.将读位置后移三位 4.将fds内容存储到缓冲区 ...

  4. 关于NLB的群集操作模式知识 (转载)

    单播:单播模式是指各节点的网络适配器被重新指定了一个虚拟MAC(由02-bf和群集IP地址组成确保此MAC的唯一性).由于所有绑定群集的网络适配器的MAC都相同,所以在单网卡的情况下,各节点之间是不能 ...

  5. pytthon—day8 读写模式的结合、文件操作模式、with完成文本文件复制、游标操作

    一.读写模式的结合 w:写指没有新建文件,有文件就清空 w=open('1.txt','w',encoding='utf-8') w.write('000\n') 在写入数据时,需要及时处理内存空间, ...

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

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

  7. Day 08 文件操作模式,文件复制,游标

    with open:将文件的释放交给with管理 with open('文件', '模式', encoding='utf-8') as f:    # 操作    pass​ a模式:追加写入 # t ...

  8. C++文件操作(输入输出、格式控制、文件打开模式、测试流状态、二进制读写)

    1.向文件写数据 头文件#include <ofstream> ①Create an instance of ofstream(创建ofstream实例) ②Open the file w ...

  9. java复制File文件操作

    ==========================复制File操作========================= /**  *   * @param newPath要赋值的路径  * @para ...

随机推荐

  1. jq 回车提交指定按钮

    $(this).keydown(function (e) { var key = window.event ? e.keyCode : e.which; ") { $("#Main ...

  2. 不依赖三方库从图像数据中获取宽高-gif、bmp、png、jepg

    int extract_pic_info(const BYTE *pic, const uint32_t size, int &width, int &height) { ; widt ...

  3. pycharm调整代码长度分割线

    1.File ->  Settings  ->  Code Style -> Right margin (columns) 的值为80,大功告成. 2.具体设置的数值可以根据个人电脑 ...

  4. SQL Server死锁产生原因及解决办法 .

    其实所有的死锁最深层的原因就是一个:资源竞争 表现一: 一个用户A 访问表A(锁住了表A),然后又访问表B,另一个用户B 访问表B(锁住了表B),然后企图访问表A,这时用户A由于用户B已经锁住表B,它 ...

  5. 【Linux高级驱动】平台设备驱动机制的编程流程与编译进内核

    [平台设备驱动机制的编程流程] [如何将驱动静态的编译进内核镜像] 1.添加资源(dev-led.c) 1.1:一般来说,系统习惯上将资源放在arch/arm/plat-samsung/目录中 cp ...

  6. 全面理解Java内存模型(JMM)

    理解Java内存区域与Java内存模型Java内存区域 Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有的用途以及创建销毁的时机,其中蓝色部分代表的是所有线程共享的数据区 ...

  7. android——判断当前网络是否可用

    http://www.cnblogs.com/codeworker/archive/2012/04/23/2467180.html //判断当前是否有网络连接 private boolean isCo ...

  8. 删除最少字符生成Palindrome

    看到一个哥们G家电面试题,求删除最少字符生成Palindrome.大神们都在讨论dp,我完全想不到. 放一个没优化的DFS. 乐神说是O(n3)复杂度, 有机会的话要减少使用substring,并且要 ...

  9. 第三百九十六节,Django+Xadmin打造上线标准的在线教育平台—其他插件使用说,自定义列表页上传插件

    第三百九十六节,Django+Xadmin打造上线标准的在线教育平台—其他插件使用说,自定义列表页上传插件 设置后台列表页面字段统计 在当前APP里的adminx.py文件里的数据表管理器里设置 ag ...

  10. idea java 非web程序打包

    以下打包非常暴力.O(∩_∩)O哈哈~ 方法一: 第一步:选择需要打包的程序 第二步:选择需要打包的文件 第三步:artifacts->jar->from modules with... ...