阅读目录:

      内容回顾

    三种字符串

    文件操作三步骤

    基础的读

    基础的写

    with...open()语法

    文件的操作模式

    文件的操作编码问题

    文件的复制

    游标操作

  ##内容回顾

类型转换
#1.数字类型:int() | bool() | float() #2.str与int:int('10') | int('-10') | int('0') | float('-.5') | float('3.14') | str(数字) #3.重点 - str与list:
'abc' => ['a', 'b', 'c']: list('abc') | ''.join(['a', 'b', 'c'])
'abc|def|xyz' => ['abc', 'def', 'xyz']: s.split('|') | '|'.join(ls) #4.list、set、tuple:类型() #5.list与dict:
a=1&b=2&c=3 <=> [('a', 1), ('b', 2), ('c', 3)] <=> {'a': 1, 'b': 2, 'c': 3} dic = {}
for k, v in [('a', 1), ('b', 2), ('c', 3)]:
dic[k] = v ls = []
for k, v in {'a': 1, 'b': 2, 'c': 3}.items():
ls.appen((k, v)) #6.可以通过字典构建任意数据的映射关系
type_map = {
1: '壹',
'壹': 1,
'owen':(1, 88888),
'add': add # add是功能(函数)
}
字符编码:
 编码表:人能识别的符号与机器能识别的符号(01组成的二进制码)映射关系
 py2:ASCII,常用ASCII表只有英文、数字、英文符号与与机器能识别的符号的对应关系
 py3:utf-8,是unicode编码表的一种实现方式,采用变长存储数据,字母数字简单符号1个字节,中文3~6字节
 
 utf-8: 变长,在英文数字较多时,更节省空间,用于传输,cpu与硬盘中采用的编码格式
 utf-16: 定长,英文数字汉字都是采用2个字节,读存效率高,内存中采用的编码格式
 
 gbk => utf-8: 转码
 普通字符串 => 二进制字符串:编码,目的是用于传输数据 'abc'.encode('utf-8')
 二进制字符串 => 普通字符串:解码,目的是用于显示数据 b'abc'.decode('utf-8')

  ##三种字符串

# 普通字符串:u'以字符作为输出单位'
print(u'abc') # 用于显示 # 二进制字符串:b'' 二进制字符串以字节作为输出单位
print(b'abc') # 用于传输 # 原义字符串:r'以字符作为输出单位,所有在普通字符串中能被转义的符号在这都原样输出'
print(u'a\tb\nc')
print(r'a\tb\nc') # 取消转义 print(r'F:\python8期\课堂内容\day08\代码\1.三种字符串.py')

  ##文件操作三步骤

#1.打开文件: 硬盘空间被操作系统持有,文件对象被应用程序持有
f = open('source.txt', 'r', encoding='utf-8') #2.操作文件
data = f.read() #3.释放文件:释放操作系统对硬盘空间的持有
f.close()

  ##基础的读

f = open('source.txt', 'r', encoding='utf-8')
f.read() # 将所有内容一次性读完
f.read(10) # 读取指定字符数
f.readline() # 一次读取一行(文件的换行标识就是结束本次读取的依据)
f.readlines() # 将所有内容读存,按换行标识作为读取一次的依据,存放为列表
f.close()

  ##基础的写

wf = open('target.txt', 'w', encoding='utf-8')

wf.write('123\n')  # 一次写一条,行必须用\n标识
wf.write('456\n')
wf.flush() # 向操作系统发送一条将内存中写入的数据刷新到硬盘
wf.write('789\n')
wf.writelines(['abc\n', 'def\n', 'xyz\n']) # 一次写多行,行必须用\n标识 wf.close() # 1.将内存中写入的数据刷新到硬盘 2.释放硬盘空间

  ##with...open()语法

# 优化整合了文件资源的打开与释放
# -- 在with的缩进内可以操作文件对象,一旦取消缩进,资源就被释放了 # part1
# as起别名,rf持有文件资源的变量
with open('target.txt', 'r', encoding='utf-8') as rf:
# 文件操作的具体代码
# 缩进一旦取消缩进,资源就被释放了 # part2
with open('target.txt', 'r', encoding='utf-8') as rf1, open('target1.txt', 'r', encoding='utf-8') as rf2:
print(rf1.read())
print(rf2.read()) # print(rf1.read()) # 报错
# print(rf2.read()) # 报错 # part3
with open('target.txt', 'r', encoding='utf-8') as rf1:
with open('target1.txt', 'r', encoding='utf-8') as rf2:
print(rf1.read())
print(rf2.read())
# print(rf1.read()) # 可以操作
# print(rf2.read()) # 不可以操作

  ##文件的操作模式

#主模式:r | w | a | x
-- 主模式只能选取一个,规定着主要的操作方式
#从模式:t | b | +
-- 从模式也必须出现,但个数不一定是一个,为主模式额外添加功能 #r: 读,必须有
#w: 清空写,可有可无
#a: 追加写,可有可无
#x:创建写,必须无 #t:默认,按字符操作
#b:按字节操作
#+:可读可写 # rt: 文件必须提前存在,不存在报错,文件操作采用字符形式 - 简写为 r
# wt: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字符形式 - 简写为 w
# at: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字符形式 - 简写为 a # rb: 文件必须提前存在,不存在报错,文件操作采用字节形式
# wb: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字节形式
# ab: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字节形式 # r+t:文件必须存在的可读可写,默认从头开始替换写,按字符操作
# w+t:文件存在清空不存在创建的可读可写,按字符操作
# a+t:文件存在追加不存在创建的可读可写,按字符操作 # r+b:文件必须存在的可读可写,默认从头开始替换写,按字节操作
# w+b:文件存在清空不存在创建的可读可写,按字节操作
# a+b:文件存在追加不存在创建的可读可写,按字节操作

  ##文件的操作编码问题

#t模式下:原文件采用什么编码,你就选取什么编码操作,如果不选取,默认跟操作系统保持一致
-- t模式下一定要指定编码 #b模式下:硬盘的数据就是二进制,且能根据内容识别出编码,写入时的数据也是通过某种编码提前处理好的,所有在操作时,没有必要再去规定编码

  ##文件的复制

# 文本文件的复制:可以t也可以b
with open('target.txt', 'r', encoding='utf-8') as rf:
with open('target2.txt', 'w', encoding='utf-8') as wf:
for line in rf:
wf.write(line) with open('target.txt', 'rb') as rf:
with open('target3.txt', 'wb') as wf:
for line in rf:
wf.write(line) # 非文本文件只能采用b模式操作,不需要指定编码 - 因为根本不涉及编码解码过程
with open('001.mp4', 'rb') as rf:
with open('002.mp4', 'wb') as wf:
for line in rf:
wf.write(line)

  ##游标操作

# 1.游标操作的是字节,所有只能在b模式下进行操作
# 2.游标操作可以改变操作位置,r模式下可以改变位置进行操作,所有主模式选择r模式
# 3.seek(offset, whence):
# -- offset为整数就是往后偏移多少个字节,负数就是往前偏移多少个字节
# -- whence:0代表将游标置为开头,1代表从当前位置,2代表将游标置为末尾 # 你是日本人
with open('target.txt', 'rb') as f:
# 先读6个字节
data = f.read(6)
print(data.decode('utf-8')) # 你是
# 将游标从头开始往后偏移3个字节
f.seek(3, 0)
data = f.read(6)
print(data.decode('utf-8')) # 是日
# 从当前游标位置往前偏移3个字节
f.seek(-3, 1)
data = f.read(3)
print(data.decode('utf-8')) # 日 f.seek(-3, 2)
data = f.read(3)
print(data.decode('utf-8')) # 人

  ##游标判断秒传机制

  

#对要上传的数据进行判断,如果和服务器上内容一致,则直接复制,从而实现秒传机制
id_str = b''
with open('001.mp4', 'rb') as f:
data = f.read()
length = len(data)
print(length)
f.seek(0, 0)
id_str += f.read(10)
f.seek(length // 2, 0)
id_str += f.read(10)
f.seek(-10, 2)
id_str += f.read(10)
print(id_str) new_id_str = b''
with open('002.mp4', 'rb') as f:
data = f.read()
length = len(data)
print(length)
f.seek(0, 0)
new_id_str += f.read(10)
f.seek(length // 2, 0)
new_id_str += f.read(10)
f.seek(-10, 2)
new_id_str += f.read(10) if new_id_str == id_str:
print('秒传成功')
else:
print('慢传')

秒传机制

  ##联系

#1. 文件a.txt内容:每一行内容分别为商品名字,价钱,个数,求出本次购物花费的总钱数
apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3
sum_1=0
with open('a.txt',mode='r',encoding='utf-8') as read_f:
for line in read_f.readlines():
# print(line,type(line))
line=line.strip().split(' ')
# print(line,type(line))#列表['apple', '10', '3'] <class 'list'>
sum_1 = sum_1 + int(line[1] *int(line[2]))
print(sum_1)

#2. 修改文件内容,把文件中的alex都替换成SB

    hello  alex
alex is good boy!
import os
def modify_file(filename,old,new):
with open(filename,mode='r',encoding='utf-8') as read_f,\
open('.bat.swap',mode='w',encoding='utf-8') as write_f:
for line in read_f:
if old in line:
line = line.replace(old,new)
write_f.write(line)
os.remove(filename)
os.rename('.bat.swap',filename)
modify_file('cop.txt','alex','SB')

Python Day 8的更多相关文章

  1. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  2. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  3. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  4. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  5. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  6. 使用Python保存屏幕截图(不使用PIL)

    起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...

  7. Python编码记录

    字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...

  8. Apache执行Python脚本

    由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...

  9. python开发编译器

    引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...

  10. 关于解决python线上问题的几种有效技术

    工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...

随机推荐

  1. C# 拖拽事件

    实现一个textBox像另一个TextBox拖拽数据. 一个控件想要被拖入数据的前提是AllowDrop属性为true. 所以,首先需要将被拖入数据的textBox的AllowDrop属性设置为Tru ...

  2. jquery:input操作

    1:让一个或一组单选框取消选择 $(".radio1").attr("checked",false); 2:查看一组单选框有么有被选中一个 $(".r ...

  3. openstack使用openvswitch实现vxlan的方法

    openstack使用openvswitch实现vxlan,分享给大家,具体如下: openstack环境: 1 版本:ocata 2 系统:ubuntu16.04.2 3 控制节点 1个 + 计算节 ...

  4. Day03 - Ruby比一比:Module的include与extend

    前情提要在第一天里,我们很激昂地用Ruby的类别.物件.方法,写了开赛宣言!在第二天里,我们比较了方法与模块,比的过程中,发现模块多了包含(inclusion)与延伸(extension). 超级比一 ...

  5. 源码解析之HashMap源码

    关于HashMap的源码分析,网上已经有很多写的非常好的文章了,虽然多是基于java1.8版本以下的.Java1.8版本的HashMap源码做了些改进,理解起来更复杂点,但也不脱离其桶+链表或树的重心 ...

  6. 深入理解C++11【2】

    [深入理解C++11[2]] 1.继承构造函数. 当基类拥有多个构造函数的时候,子类不得不一一实现. C++98 可以使用 using 来使用基类的成员函数. #include < iostre ...

  7. spring boot 1.x配置,不断完善中

    spring boot是典型的约定大于配置,那么很有必要对在开发过程中这些配置做统一的添加记录,以免用到的时候到处搜索,网上的东西又良莠不齐. server.port=8880 微服务注册中心,yml ...

  8. 【CPU微架构设计】分布式多端口(4写2读)寄存器堆设计

    寄存器堆(Register File)是微处理的关键部件之一.寄存器堆往往具有多个读写端口,其中写端口往往与多个处理单元相对应.传统的方法是使用集中式寄存器堆,即一个集中式寄存器堆匹配N个处理单元.随 ...

  9. eclipse中的web项目部署路径

    elipse添加了server之后,如果不对tomcat的部署路径做更改,则eclipse默认对工程的部署在 eclipse-workspace\.metadata.plugins\org.eclip ...

  10. Html 内容

    1.Html就是超文本标记语言的简写,是最基础的网页语言. 2.Html是通过标签来定义的语言,代码都是由标签组成的. 3.Html代码不用区分大小写. 4.Html代码由<html>开始 ...