昨日回顾

二十八、字符编码

1.什么是字符编码

二进制和字符的映射关系

2.字符编码的发展史

unicode编码(识别所有代码)

因为unicode存储占用空间,所以用utf8来存储

utf8只和unicode对应识别

内存中unicode取,存用utf8存(硬盘),全世界的人写代码都是用utf8

3.gbk和gb2312

二十九、python2和python3的区别

python解释器启动的流程

  1. python解释器相当于文本编辑器,读入字符 --》 字符编码

    1. python2默认是ascill码读入字符;python3默认utf8读入字符
    2. 如果在pycharm中的字符用的是gbk编码写入,如果你想用python正常读入字符,必须得加上coding:gbk
  2. 解析字符(有语法和关键字的概念)--》报语法/逻辑错误
  3. 存储变量,输出(往终端打印)--》字符编码
    1. python2用两种方式存储变量

      1. u'中文'用unicode存储变量,用unicode存储变量,如果终端默认utf8格式的编码,不会乱码
      2. '中文'用coding头指定的编码存储变量,假设coding头指定编码为gbk,如果终端默认utf8格式的编码,会乱码
    2. python3默认用unicode存储变量,用unicode存储变量,如果终端默认utf8格式的编码,不会乱码

今日内容

三十、文件处理

什么是文件处理

修改存储的信息

什么是文件

操作系统提供的虚拟概念,存储信息

操作文件的流程

  1. 打开文件

    f = open(r'D:/test.py', 'w', encoding = 'utf8')
  2. 修改/读取文件

    f.write('文件内容')
    f.read()
  3. 保存文件

    f.flush()
  4. 关闭文件

    f.close()

三十一、文件的三种打开模式

  1. rt(只读)

    f = open(r'D:\上海python12期视频\python12期视频\day 09\test.py', 'rt', encoding='utf8')
    f.write('slkdjfklj')
    data = f.read()
    print(data)
    • 了解

      print(f.readline())  # 一行一行读取
      print(f.readlines())  # 读取所有行放入列表 
    • 循环读出文本内容

      for i in f.read():  # 循环出一个个字符
          print(i)
      
      for i in f:  # 循环出一行行 # 节省内存
          print(i)
      
       # 文本读一行少一行,每一行末尾默认有一个换行
  2. wt:只写(清空文件后写入,不可读)

    f = open(r'D:\上海python12期视频\python12期视频\day 09\test.py', 'wt', encoding='utf8')  # encoding指定读文件的编码格式
    f.write('abc')
    • 了解

      f.writelines(['abc', 'edf', 'gbk'])  # 自动拼接列表元素,一行写入
  3. at:只写入(追加写入)

    f = open(r'D:\上海python12期视频\python12期视频\day 09\test.py', 'at', encoding='utf8')  # encoding指定写文件的编码格式
    f.write('中')

打开文件的两种方式

  • t为文本,b为二进制模式,一般不单独使用,与r/a/w联用

  • b模式一般用于图片/音频/视频的保存
  • w和a模式可以自动创建文件

三十二、绝对路径和相对路径

  • 文件的路径

    文件在硬盘的地址

  1. 绝对路径

    从盘符开始

  2. 相对路径

    执行文件(当前运行的文件)的文件夹下的文件名,执行文件和打开文件属于同一文件夹下

未来写项目尽量使用相对路径,因为会部署到linux系统

三十三、with管理上下文

with提供一个自动关闭文件

with open('test.py','r',encoding = 'utf-8')as f:
    data = f.read()
print(data)

关闭文件但是并不会关闭python内存中的文件print(f) # 只涉及pythonprint(f.read()) # 涉及到操作系统,会报错

三十四、文件的高级应用

1.文件打开的新模式

三种新的模式(可读也可写),尽量不要使用

  1. r+ 可写可读

    with open('test.py','r+',encoding = 'utf-8') as fr:
        fr.write('haoji')  # 光标在文件头部,覆盖后面字符
  2. w+ 可写可读 (和w没有任何区别)

  3. a+ 可写可读 (默认光标在尾部)

综上:如果你真的有即可读又可写的需求,用两种不同的模式打开两次文件

2.光标的高级应用

8个进制位是1个字节,utf8中三个字节是一个中文字符,一个字节是一个英文单词

  • 这三种移动光标以字节为单位
  1. seek

    # 规定只有0、1、2三种模式,
    # 0:文件头开始
    # 1:当前光标所在位置开始
    # 2:文件末尾
    
    fr.seek(3,0)  # 开头
    fr.seek(3,1)  # 当前光标
    fr.seek(3,2)  # 末尾
  2. tell:得出当前位置

    with open('test.py', 'rb') as fr:
        fr.seek(3, 0)
        print(fr.tell())
  3. truncate:截断

    with open('test.py', 'ab') as fa:
        fa.truncate(2)
  • 以字符为单位移动光标

    read

    with open('test.py', 'r', encoding='utf8') as fr:
            print(fr.read(3))  # n表示n个字符,不加默认读取所有 # 中文和英文都属于一个字符

登陆注册

# 注册
count = 0
while count < 3:
    username_inp = input('请输入你的用户名:')
    pwd_inp = input('请输入你的密码:')
    re_pwd_inp = input('请在此输入你的密码:')

    if not pwd_inp == re_pwd_inp:
        print('两次密码输入不一致')
        count += 1
        continue

    with open('user_info.txt', 'a', encoding='utf8') as fa:
        fa.write(f'{username_inp}:{pwd_inp}\n')  # :表示用户名和密码的分割;|用户和用户之间的分割
        fa.flush()
        break
# 登录
username_inp = input('请输入你的用户名:')
pwd_inp = input('请输入你的密码:')

with open('user_info.txt', 'r', encoding='utf8') as fr:
    for user_info in fr:
        username, pwd = user_info.split(':')

        if username.strip() == username_inp and pwd.strip() == pwd_inp:  # strip可以去掉两端的换行符
            print('登录成功')
            break
        # else:
        #     continue  # continue一般不写在最后一行
    else:
        print('登录失败')

文件的修改

#文件没有修改一说,只有覆盖
#缓存文件的原理
with open('test.py', 'r', encoding='utf8') as fr, \
        open('test_swap.py', 'w', encoding='utf8') as fw:
    data = fr.read()
    data = data.replace('sb', '傻逼')

    fw.write(data)

import os

os.remove('test.py')
os.rename('test_swap.py', 'test.py')

with open('test.py', 'r', encoding='utf8') as fr, \
        open('test_swap.py', 'w', encoding='utf8') as fw:
    # 再大的文件都能修改
    for i in fr:
        s = '傻逼'
        i = i.replace('sb', s)
        fw.write(i)
        # fw.flush()  # 先保存成功再继续运行

import os

os.remove('test.py')
os.rename('test_swap.py', 'test.py')

import os

print(os.listdir(r'D:\上海python12期视频\python12期视频'))

文件的处理(day09整理)的更多相关文章

  1. HTML5 本地文件操作之FileSystemAPI整理(二)

    一.文件目录操作 1.DirectoryEntry对象 属性: 1.isFile: 操作对象的是否为文件,DirectoryEntry对象固定其值为false 2.isDirectory: 操作对象是 ...

  2. 【转】PHP实现下载与压缩文件的封装与整理

    [转]PHP实现下载与压缩文件的封装与整理    https://mp.weixin.qq.com/s/BUI3QsdNi6Nqu0NhrUL8hQ 一.PHP实现打包zip并下载功能 $file_t ...

  3. Linux文件操作常用命令整理

    收集.整理日常系统管理或维护当中的,常用到的一些关于文件操作的命令或需求,后续会慢慢补充.完善! 查看.生成指定目录的目录树结构?   [root@DB-Server ~]#tree   #当前目录 ...

  4. Linux文件编辑命令详细整理

    刚接触Linux,前几天申请了个免费体验的阿里云服务器,选择的是Ubuntu系统,配置jdk环境变量的时候需要编辑文件. vi命令编辑文件,百度了一下,很多回答不是很全面,因此编辑文件话了一些时间. ...

  5. Linux文件编辑命令具体整理

    刚接触Linux,前几天申请了个免费体验的阿里云server,选择的是Ubuntu系统.配置jdk环境变量的时候须要编辑文件. vi命令编辑文件,百度了一下,非常多回答不是非常全面,因此编辑文件话了一 ...

  6. so文件成品评论【整理】

    这是我的 @布加迪20 AZ在一篇文章中写道:<汉化so文件的心得>中的技术附件做的简洁性整理.原来的看起来不是非常方便.一起分享学习.. 正文 SO文件汉化心得 --By布加迪20   ...

  7. HttpWebRequest上传多文件和多参数——整理

    1.整理HttpWebRequest上传多文件和多参数.较上一个版本,更具普适性和简易型.注意(服务方web.config中要配置)这样就可以上传大文件了 <system.webServer&g ...

  8. 【MVC】 文件及URL 的整理

    我们平时在做Asp.Net MVC(以下就简称mvc)项目的时候,页面文件结构都用了"/Views/Controllers/page.aspx",而把一些PartialView呢放 ...

  9. asp.net 文件上传示例整理

    ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录.  代码如下 复制代码 ...

随机推荐

  1. 使用Fedora8 iso开发环境开发gtk3跨Linux多版本桌面应用

    原文: https://bbs.otherhill.com/index.php/topic/show/82 gtk3 demo在/usr/local/gtk3demo 目录下 cd /usr/loca ...

  2. 机器学习之SVM调参实例

    一.任务 这次我们将了解在机器学习中支持向量机的使用方法以及一些参数的调整.支持向量机的基本原理就是将低维不可分问题转换为高维可分问题,在前面的博客具体介绍过了,这里就不再介绍了. 首先导入相关标准库 ...

  3. go 学习笔记之10 分钟简要理解 go 语言闭包技术

    闭包是主流编程语言中的一种通用技术,常常和函数式编程进行强强联合,本文主要是介绍 Go 语言中什么是闭包以及怎么理解闭包. 如果读者对于 Go 语言的闭包还不是特别清楚的话,可以参考上一篇文章 go ...

  4. jar包冲突了?如何确定是和哪个jar包冲突了?

    导读:工程编译的时候好好地,怎么一运行就报各种的NoSuch***Error,猜测可能是jar包冲突了,但是究竟是和哪个jar包冲突了呢. 关键词:jar包冲突,NoSuchFileldError,N ...

  5. php基础——语法、变量

    一.php语法: 1.php语言需要写在<?php  ?>标签里面 2.php语言每行结束需要使用:作为结束符 3.php是一门弱语言,不要求先声明变量 4.可嵌套在HTML和js语言中 ...

  6. 基本IO操作--字节流

    一.InputStream与OutputStream1. 输入与输出 我们编写的程序除了自身会定义一些数据信息外,经常还会引用外界的数据,或是将自身的数据发送到外界.比如,我们编写的程序想读取一个文本 ...

  7. springboot与docker整合

    一.springboot与docker整合 a.创建Dockerfile FROM java MAINTAINER "Wing"<1561815137@qq.com> ...

  8. Javascript设计模式——建造者模式

    建造者模式是相对比较简单的一种设计模式,属于创建型模式的一种: 定义:将一个复杂的对象分解成多个简单的对象来进行构建,将复杂的构建层与表现层分离,使相同的构建过程可以创建不同的表示模式:    优点: ...

  9. RMAN详细教程(二):备份、检查、维护、恢复

    RMAN详细教程(一):基本命令代码 一.创建增量备份 增量备份级别为0-4,但为方便备份管理,oracle建议只限于0级和1级. 1.差异增量备份(differential incremental ...

  10. 网页布局——float浮动布局

    我的主要参考资料是[Object object]的文章 float 布局应该是目前各大网站用的最多的一种布局方式了,但是也特别复杂,这里详细讲一下 首先,什么是浮动? 浮动元素是脱离文档流的,但不脱离 ...