python学习点滴记录-Day02补充-文件操作

字符编码:

  把人类的字符翻译成计算机能认识的数字

  字符编码表

  存放着人类字符和计算机数字的对应关系表

  ascii、gbk、utf-8、unicode

  unicode》encode(utf8)》bytes

  bytes》decode(utf8)》unicode

文件处理补充:

   字符以什么格式编码的,就要以什么格式解码

文件的打开模式

文件句柄 = open(‘文件路径‘, ‘模式‘)

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的模式有:

  • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
  • w,只写模式【不可读;不存在则创建;存在则清空内容】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容】

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

"b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

练习,利用b模式,编写一个cp工具,要求如下:

  1. 既可以拷贝文本又可以拷贝视频,图片等文件

  2. 用户一旦参数错误,打印命令的正确使用方法,如usage: cp source_file target_file

  提示:可以用import sys,然后用sys.argv获取脚本后面跟的参

上下文管理

with open(‘a.txt‘,‘w‘) as f:
    pass

with open(‘a.txt‘,‘r‘) as read_f,open(‘b.txt‘,‘w‘) as write_f:
    data=read_f.read()
    write_f.write(data)

模拟copy

import sys
if len(sys.argv) != 3:#如果接收到的参数不等3,提示信息并退出程序
    print(‘提示:python3 copy.py source.file target.file‘)
    sys.exit()
with open(r‘%s‘%sys.argv[1],‘rb‘) as read_f,        open(r‘%s‘%sys.argv[2],‘wb‘) as write_f:#
    for line in read_f:#循环源文件内容的二进制内容依次写入到目标文件中,同样是以二进制
        write_f.write(line)

光标的位置

一: read(3):

  1. 文件打开方式为文本模式时,代表读取3个字符

  2. 文件打开方式为b模式时,代表读取3个字节

二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate

注意:

  1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

  2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

  模拟tail -f

import time
with open(‘access.log‘,‘rb‘) as f:
    f.seek(0,2)#直接移动的文件末尾
    while True:#while循环的读取文件新内容
        line=f.readline()
        if line:
            print(line.decode(‘utf-8‘),end=‘‘)#如果有新内容就打印出decode解码后的内容
        else:
            time.sleep(0.2)#没有新内容就sleep后重来

模拟文件的修改

import os
with open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) as read_f,        open(‘.a.txt.swap‘,‘w‘,encoding=‘utf-8‘) as write_f:
    for line in read_f:
        if line.startswith(‘hello‘):
            line=‘哈哈哈\n‘
        write_f.write(line)

os.remove(‘a.txt‘)
os.rename(‘.a.txt.swap‘,‘a.txt‘)
时间: 2024-12-03 05:45:25

python学习点滴记录-Day02补充-文件操作的相关文章

Python学习系列(五)(文件操作及其字典)

Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件 在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出,也可以指定每次read读多少字节,例如: 1 #coding:utf-8 2 fn='test1.py' 3 fp=open(fn,'r') #以读的方式打开文件,文件必须首先存在和,.文件在同一目录下py 4 print 'reading pos:',fp.tell() 5 r=fp.read(20) #

python学习列表字符串字典集合文件操作字符串编码与转换

一.列表 1 names = "ZhangYang GuYun XiangPeng XuLiangchen" 2 names = ["ZhangYang", "GuYun", "XiangPeng", "ChengRongHua","XuLiangchen"] 3 names.append("LeiHaiDong") #在列表最后追加一个元素 4 names.inse

python学习笔记——(三)文件操作

·集合操作及其相应的操作符表示集合中没有插入,只有添加,因为毕竟无序 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Vergil Zhang list_1 = [1, 4, 5, 7, 3, 6, 7, 9] list_1 = set(list_1) print(list_1, type(list_1)) list_2 = set([2, 6, 0, 66, 22, 8]) print(list_1,list_2) #交集 print

python学习点滴记录-Day22

文件上传 form表单文件操作 ajax文件操作 头像上传 默认头像覆盖 预览 注册页面,form钩子,清空之前的error信息 博客首页,初始化数据,首页样式调试. auth实现登录与注册 个人中心左侧的昵称 园龄 头像:分类归档.标签归档.时间归档: 各个url跳转 文章详情页 点赞 不能重复点赞, 事物 def diggit(request): from django.db.models import F from django.db import transaction state={"

python 点滴记录8:文件操作read、readline与readlines

python读取文件内容时,有三种方法:read().readline()和readlines() 这三种方法区别如下: read(...)     read([size]) -> read at most size bytes, returned as a string.          If the size argument is negative or omitted, read until EOF is reached.     Notice that when in non-blo

python学习点滴记录-Day20(分页、cookie/session、ajax)

上节课内容回顾:ORM增删改查 Django提供的分页器使用以及分析讲解 Cookie和session讲解与在Django中的使用 ajax的讲解与简单使用 Django分页器(paginator) 要使用Django实现分页器,必须从Django中导入Paginator模块 from django.core.paginator import Paginator 假如现在有150条记录要显示,每页显示10条 >>> from django.core.paginator import Pa

python学习点滴记录-Day01

参考链接 https://triaquae.gitbooks.io/python/content/chapter1.html 一.python的安装 1.windows平台的到python官网下载windows版本安装介质,按照提示安装完毕即可使用. 2.linux平台的可以通过yum或者python官网下载tar包进行安装. 无论是windows还是linux下,为了方便使用,建议添加到环境变量中. windows:计算机属性--高级系统设置--系统--环境变量--PATH中添加python的

python学习点滴记录-Day08

本次课大纲 接口与归一化设计 多态与多态性 封装 静态属性property 面向对象高级 异常处理 网络编程 接口与归一化设计 1.什么是接口 =================第一部分:Java 语言中的接口很好的展现了接口的含义: IAnimal.java /* * Java的Interface接口的特征: * 1)是一组功能的集合,而不是一个功能 * 2)接口的功能用于交互,所有的功能都是public,即别的对象可操作 * 3)接口只定义函数,但不涉及函数实现 * 4)这些功能是相关的,都

python学习点滴记录-Day18-django-orm

第18天课程内容: 模板语言的常用标签 自定义过滤器与标签 模板语言之继承 ORM的查询API 单表查询之双下划线 一对多的添加数据方法 mtv补充 修改pycharm连接db为mysql时遇到的问题 解决: 在项目的__init__.py文件中加 import pymysql pymysql.install_as_MySQLdb() post提交表单数据时,默认会提示403 forbidden,需要在form表单处添加{% csrf_token %},render方法会为它渲染一个随机字符串一