Python Day 8
阅读目录:
内容回顾
三种字符串
文件操作三步骤
基础的读
基础的写
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的更多相关文章
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
- 使用Python保存屏幕截图(不使用PIL)
起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...
- Python编码记录
字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...
- Apache执行Python脚本
由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...
- python开发编译器
引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...
- 关于解决python线上问题的几种有效技术
工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...
随机推荐
- 云栖大会day1 下午
下午参与的是创新创业专场 会议议程是 创新创业专场-2018阿里云创新中心年度盛典 13:30-14:10 阿里双创新征程 李中雨 阿里云创业孵化事业部总经理 14:10-14:40 人货场的渗透与重 ...
- nginx优化php-fpm优化 压力测试达到每分150万访问量webbench网站压力
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装:引用wget http: ...
- Spring再接触 简单属性注入
<bean name="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl"> <property ...
- sql优化之concat/concat_ws/group_concat
原文1:https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc 原文2:https://www.y ...
- JSONObject optString
JSONObject optString 获取后台返回的{"state":1001,"data":"数据保存成功"} 用optString ...
- jQuery轮播图--不使用插件
说明:引入jquery.min.js 将轮播图放入imgs文件夹 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...
- P和C
import tensorflow as tf import numpy as np import math import keras from keras.layers import Conv2D, ...
- Servle第四篇(会话技术之cookie)
会话技术 什么是会话技术 基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话. 为什么我们要使 ...
- 洛谷 P1426小鱼会有危险吗
题目: 有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每秒游的距离只有前一秒的98%.有个极其邪恶的猎人在距离A处右边s米的地方,安装了一个隐蔽的探测器,探测器左右x米之内是探 ...
- layer弹出层不居中解决方案(转)
@感谢参考文章 原文内容: 一.问题描述 用layer做操作结果提示时,发现如果页面超出屏幕的高度时,弹出的提示不是屏幕居中,而是在页面高度的中间,如果一个页面的高度比较大,就看不到提示了. 还有一种 ...