阅读目录:

      内容回顾

    三种字符串

    文件操作三步骤

    基础的读

    基础的写

    with...open()语法

    文件的操作模式

    文件的操作编码问题

    文件的复制

    游标操作

  ##内容回顾

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

  ##三种字符串

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

  ##文件操作三步骤

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

  ##基础的读

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

  ##基础的写

  1. wf = open('target.txt', 'w', encoding='utf-8')
  2.  
  3. wf.write('123\n') # 一次写一条,行必须用\n标识
  4. wf.write('456\n')
  5. wf.flush() # 向操作系统发送一条将内存中写入的数据刷新到硬盘
  6. wf.write('789\n')
  7. wf.writelines(['abc\n', 'def\n', 'xyz\n']) # 一次写多行,行必须用\n标识
  8.  
  9. wf.close() # 1.将内存中写入的数据刷新到硬盘 2.释放硬盘空间

  ##with...open()语法

  1. # 优化整合了文件资源的打开与释放
  2. # -- 在with的缩进内可以操作文件对象,一旦取消缩进,资源就被释放了
  3.  
  4. # part1
  5. # as起别名,rf持有文件资源的变量
  6. with open('target.txt', 'r', encoding='utf-8') as rf:
  7. # 文件操作的具体代码
  8. # 缩进一旦取消缩进,资源就被释放了
  9.  
  10. # part2
  11. with open('target.txt', 'r', encoding='utf-8') as rf1, open('target1.txt', 'r', encoding='utf-8') as rf2:
  12. print(rf1.read())
  13. print(rf2.read())
  14.  
  15. # print(rf1.read()) # 报错
  16. # print(rf2.read()) # 报错
  17.  
  18. # part3
  19. with open('target.txt', 'r', encoding='utf-8') as rf1:
  20. with open('target1.txt', 'r', encoding='utf-8') as rf2:
  21. print(rf1.read())
  22. print(rf2.read())
  23. # print(rf1.read()) # 可以操作
  24. # print(rf2.read()) # 不可以操作

  ##文件的操作模式

  1. #主模式:r | w | a | x
  2. -- 主模式只能选取一个,规定着主要的操作方式
  3. #从模式:t | b | +
  4. -- 从模式也必须出现,但个数不一定是一个,为主模式额外添加功能
  5.  
  6. #r: 读,必须有
  7. #w: 清空写,可有可无
  8. #a: 追加写,可有可无
  9. #x:创建写,必须无
  10.  
  11. #t:默认,按字符操作
  12. #b:按字节操作
  13. #+:可读可写
  14.  
  15. # rt: 文件必须提前存在,不存在报错,文件操作采用字符形式 - 简写为 r
  16. # wt: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字符形式 - 简写为 w
  17. # at: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字符形式 - 简写为 a
  18.  
  19. # rb: 文件必须提前存在,不存在报错,文件操作采用字节形式
  20. # wb: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字节形式
  21. # ab: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字节形式
  22.  
  23. # r+t:文件必须存在的可读可写,默认从头开始替换写,按字符操作
  24. # w+t:文件存在清空不存在创建的可读可写,按字符操作
  25. # a+t:文件存在追加不存在创建的可读可写,按字符操作
  26.  
  27. # r+b:文件必须存在的可读可写,默认从头开始替换写,按字节操作
  28. # w+b:文件存在清空不存在创建的可读可写,按字节操作
  29. # a+b:文件存在追加不存在创建的可读可写,按字节操作

  ##文件的操作编码问题

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

  ##文件的复制

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

  ##游标操作

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

  ##游标判断秒传机制

  

  1. #对要上传的数据进行判断,如果和服务器上内容一致,则直接复制,从而实现秒传机制
  2. id_str = b''
  3. with open('001.mp4', 'rb') as f:
  4. data = f.read()
  5. length = len(data)
  6. print(length)
  7. f.seek(0, 0)
  8. id_str += f.read(10)
  9. f.seek(length // 2, 0)
  10. id_str += f.read(10)
  11. f.seek(-10, 2)
  12. id_str += f.read(10)
  13. print(id_str)
  14.  
  15. new_id_str = b''
  16. with open('002.mp4', 'rb') as f:
  17. data = f.read()
  18. length = len(data)
  19. print(length)
  20. f.seek(0, 0)
  21. new_id_str += f.read(10)
  22. f.seek(length // 2, 0)
  23. new_id_str += f.read(10)
  24. f.seek(-10, 2)
  25. new_id_str += f.read(10)
  26.  
  27. if new_id_str == id_str:
  28. print('秒传成功')
  29. else:
  30. print('慢传')

秒传机制

  ##联系

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

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

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

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. 云栖大会day1 下午

    下午参与的是创新创业专场 会议议程是 创新创业专场-2018阿里云创新中心年度盛典 13:30-14:10 阿里双创新征程 李中雨 阿里云创业孵化事业部总经理 14:10-14:40 人货场的渗透与重 ...

  2. nginx优化php-fpm优化 压力测试达到每分150万访问量webbench网站压力

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装:引用wget http: ...

  3. Spring再接触 简单属性注入

    <bean name="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl"> <property ...

  4. sql优化之concat/concat_ws/group_concat

    原文1:https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc 原文2:https://www.y ...

  5. JSONObject optString

    JSONObject optString  获取后台返回的{"state":1001,"data":"数据保存成功"} 用optString ...

  6. jQuery轮播图--不使用插件

    说明:引入jquery.min.js    将轮播图放入imgs文件夹 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...

  7. P和C

    import tensorflow as tf import numpy as np import math import keras from keras.layers import Conv2D, ...

  8. Servle第四篇(会话技术之cookie)

    会话技术 什么是会话技术 基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话. 为什么我们要使 ...

  9. 洛谷 P1426小鱼会有危险吗

    题目: 有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每秒游的距离只有前一秒的98%.有个极其邪恶的猎人在距离A处右边s米的地方,安装了一个隐蔽的探测器,探测器左右x米之内是探 ...

  10. layer弹出层不居中解决方案(转)

    @感谢参考文章 原文内容: 一.问题描述 用layer做操作结果提示时,发现如果页面超出屏幕的高度时,弹出的提示不是屏幕居中,而是在页面高度的中间,如果一个页面的高度比较大,就看不到提示了. 还有一种 ...