阅读目录:

      内容回顾

    三种字符串

    文件操作三步骤

    基础的读

    基础的写

    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. Golang源码探索(三) GC的实现原理(转)

    Golang从1.5开始引入了三色GC, 经过多次改进, 当前的1.9版本的GC停顿时间已经可以做到极短.停顿时间的减少意味着"最大响应时间"的缩短, 这也让go更适合编写网络服务 ...

  2. 1503.02531-Distilling the Knowledge in a Neural Network.md

    原来交叉熵还有一个tempature,这个tempature有如下的定义: \[ q_i=\frac{e^{z_i/T}}{\sum_j{e^{z_j/T}}} \] 其中T就是tempature,一 ...

  3. Mac gitk安装与优化

    一.mac系统安装gitk gitk是git的一个bin工具,如果git不包含gitk只能说明当前使用的git版本过老. 因此我们只需要安装最新的git就可以了.安装git方法如下: 首先安装brew ...

  4. easyui-textbox多行文本中输入内容,有回车操作时将文本拼接<br/>

    <input class="easyui-textbox" name="versionText" id="versionText" d ...

  5. spring mvc 参数绑定

    基础类型 原始类型:id必须要传,否则报错. @RequestMapping("/test") @ResponseBody public ResponseData test(int ...

  6. Docker registry垃圾回收

    Docker registry垃圾回收 通过: docker run -p 5000:5000 -v /netdata/xxxx/registry:/var/lib/registry registry ...

  7. I/O多路复用、协程、线程、进程

    select注册fd,阻塞,当有fd状态改变时返回,确认对应的fd,做下一步处理.简单来说就是先注册,注册完后休眠并设置一个定时器醒来查看,有事件就通知来取,进行后续动作,没事件就继续睡,再设闹钟.用 ...

  8. Excel vba:批量生成超链接,添加边框,移动sheet等

    Excel vba 操作 批量生成sheet目录并添加超链接 Sub Add_Sheets_Link() 'Worksheets(5)为清单目录页 '在sheet页上生成sheet页名字并超链接 To ...

  9. AHB协议整理 AMBA

    本文对AHB协议作了简单整理,整理自两篇文章: AHB总线协议 AHB重点难点总结 1. 简介 AHB总线规范是AMBA总线规范的一部分,AMBA总线规范是ARM公司提出的总线规范,被大多数SoC设计 ...

  10. LeetCode至 少有 1 位重复的数字

    给定正整数 N,返回小于等于 N 且具有至少 1 位重复数字的正整数. 示例 1: 输入:20 输出:1 解释:具有至少 1 位重复数字的正数(<= 20)只有 11 . 示例 2: 输入:10 ...