day007|python基础回顾7
文件处理
1 文件打开模式补充
with open('a.txt', mode='r+t', encoding='utf-8') as f:
    print(f.read())
    print(f.writable())
    print(f.readable())
    f.write("你好")
with open('a.txt', mode='w+t', encoding='utf-8') as f:
    print(f.writable())
    print(f.readable())
    f.write("你好")
    res = f.read()
    print("===> %s" % res)
with open('a.txt', mode='a+t', encoding='utf-8') as f:
    print(f.writable())
    print(f.readable())
    print(f.read())
f.flush()
print(f.name)
print(f.encoding)
2.1 文件操作之读操作
with open('a.txt', mode='rt', encoding='utf-8') as f:
    line1 = f.readline()
    print(line1)
    line2 = f.readline()
    print(line2)
    for line in f:
        print(line)
    lines = f.readlines()
    print(lines)
2.2 文件操作之写操作
with open('a.txt', mode='wt', encoding='utf-8') as f:
    f.write("1111\n2222\n3333\n")
    for x in "hello":
        f.write(x)
    f.writelines("hello")  # f.write("hello")
    f.writelines(["111", "222", "333"])
    f.writelines(["111\n", "222\n", "333\n"])
3 控制文件指针移动
3.1 前提
- 文件内指针移动,除了t模式下的read(n)中n代表的是字符个数 
- 其他都是以bytes为单位的 
with open('a.txt', mode='rt', encoding='utf-8') as f:
    res = f.read(6)
    print(res)
with open('a.txt', mode='rb') as f:
    res = f.read(8)
    print(res)
    print(res.decode('utf-8'))
with open('a.txt', mode='r+', encoding='utf-8') as f:
    f.truncate(8)
3.2 f.seek()
- f.seek(移动的字节个数,模式) 
- 三种模式 - 0:参照文件开头移动指针 - 1:参照当前所在的位置移动指针 - 2:参照文件末尾位置移动指针 
- 只有0模式可以在t下使用,1和2只能在b下使用 
with open('a.txt', mode='a+b') as f:
    print(f.tell())         # 查看指针在文件的第几个字节
with open('a.txt', mode='r+b') as f:
    f.seek(0, 2)
    print(f.tell())
with open('a.txt', mode='a+b') as f:
    f.seek(-6, 2)
    # print(f.read().decode('utf-8'))
    print(f.read(3).decode('utf-8'))
import time
with open('a.txt', mode='rb') as f:
    f.seek(0, 2)
    while True:
        line = f.readline()
        if len(line) == 0:
            time.sleep(0.1)
        else:
            print(line.decode('utf-8'), end="")
4 文件修改的两种方式
4.1 方式一
1、以r模式打开源文件,将源文件内容全部读入内存
2、在内存中修改完毕
3、以w模式打开源文件,将修改后的内容写入源文件
优点:不必大量占用硬盘资源
缺点:耗内存,需要足够的内存空间
with open('a.txt', mode='rt', encoding='utf-8') as f1:
    data = f1.read()
    res = data.replace('hello', '早上好')
with open('a.txt', mode='wt', encoding='utf-8') as f2:
    f2.write(res)
4.2 方式二
1、以r模式打开源文件,然后以w模式打开一个临时文件
2、从源文件中读一行到内存中,修改完毕后直接写入临时文件,循环往复直到操作完毕所有行
3、删除源文件,将临时文件名改为源文件名
优点:没有对内存造成过度的占用
缺点:需要硬盘预留出足够的空间来存放临时文件
import os
with open('a.txt', mode='rt', encoding='utf-8') as src_f,\
        open('.a.txt.swp', mode='wt', encoding='utf-8') as dst_f:
    for line in src_f:
        dst_f.write(line.replace('你好', 'Hello'))
os.remove('a.txt')
os.rename('.a.txt.swp', 'a.txt')
5 函数的基本使用
5.1 概述
1、什么是函数?
函数就是用来盛放代码的容器
		具备某一功能的工具-->工具
		事先准备好工具的过程-->函数的定义
		遇到应用场景,拿来就用-->函数的调用
2、为何要用函数?
解决问题
Ⅰ 可读性差
Ⅱ 拓展性差
3、如何用函数?
先定义后引用
5.2 基本使用
def say_hello():  # say_hello=函数的内存地址
    print("======")
    print("hello world")
    print("======")
print(say_hello)  # <function say_hello at 0x00000241DA0273A0>
say_hello()
x = 10            # x=10的内存地址
print(x)
5.3 步骤
# 函数定义阶段:只检测语法,不执行代码
# def foo():
#     xxx
#     print('from foo')
# 函数调用阶段:执行函数体代码
# foo()
5.4 示例
# 示例1
def bar():
    print('from bar')
def foo():
    print('from foo')
    bar()
foo()
# 示例二
def bar():
    print('from bar')
    foo()
def foo():
    print('from foo')
bar()
示例三
def bar():
    print('from bar')
    foo()
bar()
def foo():
    print('from foo')
5.5 函数定义的完整语法
- def 函数名(参数1, 参数2, 参数3...): 
 '''
 注释信息
 '''
 代码1
 代码2
 代码3
 return 返回值
- 定义函数的三种形式 
无参函数
def f1():
    print("hello")
    print("你好")
    print("Hi")
f1()
def login():
    name = input('username>>>:').strip()
    pwd = input('password>>>:').strip()
    if name == "ccc" and pwd == '111':
        print('ok')
    else:
        print('error')
login()
有参函数
def login(name,pwd):
    if name == "ccc" and pwd == "123":
        print('ok')
    else:
        print('error')
login("ccc","123")
login("ccc","1234")
def f2(x, y):
    print(x)
    print(y)
f2(111, 222)
def add(x, y):
    print(x+y)
add(10, 20)
add(30, 40)
空函数
def login():
    pass
def transfer():
    pass
def withdraw():
    pass
def check_balance():
    pass
- 调用函数的三种形式
def add(x, y):
    z = x + y
    return z
# res = add(10, 20)
# print(res)
# res = len("hello")
# print(res)
# 1、语句形式
len("hello")
# 2、表达式形式
res = len("hello") + 10
print(res)
# 3、函数调用可以当作一个参数传给另外一个函数
print(add(5, 5))
res = add(add(1, 2), 3)
print(res)
5.6 函数的返回值
- return作用1:控制返回值
Ⅰ 没有return-->默认返回就是None
def func():
    print(111)
res = func()
print(res)
Ⅱ return 值-->返回就是那一个值
def max2(x, y):
    if x > y:
        return x
    else:
        return y
res = max2(100, 200) * 5
print(res)
Ⅲ return 值1,值2,值3--->返回的是一个元组
def func():
    return [11, 22], 2, 3
res = func()
print(res, type(res))       # ([11, 22], 2, 3) <class 'tuple'>
- return作用2:函数内可以有多个return,但只要执行一个就会立即种植函数的运行,并且会将return后的值当做本次调用的产品返回
def func():
    print(111)
    return 2201202
    print(2222)
    return 11112222
    print(3333)
res = func()
print(res)          # 111 2201202
附录:a.txt
早上好玛卡巴卡
早上好汤姆波利伯
早上好小点点
早上好依古比古
早上好唔西迪西
早安哈呼呼
早安鸟儿
Hello叮叮车
Hello飞飞鱼
day007|python基础回顾7的更多相关文章
- python 基础回顾 一
		Python 基础回顾 可变类型:list ,dict 不可变类型:string,tuple,numbers tuple是不可变的,但是它包含的list dict是可变的. set 集合内部是唯一的 ... 
- python基础回顾1
		定义 tuple(元组), list (表) #!/usr/bin/env python # encoding: utf-8 a = 10 #定义一直变量,无需声明 s1 = (2,1.3,'love ... 
- python基础回顾
		1.第二个缺点就是代码不能加密.如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows 上常见的xxx.exe ... 
- python基础回顾笔记
		1.知道了什么是编程语言 2.知道了python.C#.Java都是语言的种类 3.python:有很多种 cpython.pypy.jpython... 4.python的执行方式有两种: 解释器 ... 
- day001|python基础回顾
		1.python是一门编程语言 编程语言是人与计算机能够沟通的一种语言 人----------编程语言---------计算机 2.编程是: ①人将要做的事的步骤想清楚 ②找计算机能够听懂的语言将步骤 ... 
- day002|python基础回顾2
		目录 00 上节课复习 01 基本数据类型 02 与用户交互 03 运算符 04 流程运算之if判断 05 流程判断之while循环 06 TEST 00 上节课复习 ""&quo ... 
- python高级(1)—— 基础回顾1
		Python基础回顾 认识变量 在学习了之前的Python零基础入门系列[洗礼灵魂,修炼Python](说明一下,这个系列现在回过来再来看这个名字确实好土啊,然后有些知识点感觉还不太精准,后期看如果有 ... 
- python学习笔记(1):python基础
		python基础回顾 1.Ipython魔术命令 %timeit //多次执行一条语句,并返回平均时间,%%time->多条语句,用于测试一条语句用了多少时间 %time //返回执行一条语句的 ... 
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器      同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
		本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ... 
随机推荐
- 使用TypeScript给Vue 3.0写一个指令实现组件拖拽
			最近在用vue3重构后台的一个功能.一个弹窗组件,弹出一个表单.然后点击提交. 早上运维突然跑过来问我,为啥弹窗挡住了下边的表格的数据,我添加的时候,都没法对照表格来看了.你必须给我解决一下. 我参考 ... 
- 注意由双大括号匿名类引起的serialVersionUID编译告警
			问题描述 最近版本组织清理编译告警,其中有这么一条比较有意思,之前没见过,拿出来说一说 "serializable class anonymous com.demo.Main$1 has n ... 
- Kubernetes Controller详解
			运行容器化应用是Kubernetes最重要的核心功能.为满足不同的业务需要,Kubernetes提供了多种Controller,主要包括Deployment.DaemonSet.Job.CronJob ... 
- SpringBoot整合Logback日志框架配置全解析
			目录 本篇要点 一.Logback日志框架介绍 二.SpringBoot与Logback 1.默认日志格式 2.控制台输出 3.文件输出 4.日志级别 5.日志组 6.自定义log配置 三.logba ... 
- redhat 7.4从openssh7.6离线升级openssh8.4p1解决方法
			具体需求 这几天生产环境服务器又进行了安全扫描,每次都会报一下漏洞错误.虽然只有一个高危问题,但是每次看到ssh远程漏洞都很烧脑 "主要是里面坑太多了",闲话就不说了,今天我们来看 ... 
- svg究竟是什么?
			svg究竟是什么? 1 要点 要点1:svg与jpg/png等格式的用途完全不同,不可相提并论,没有可比性,不可互相替代. 要点2:日常生活中,我们用相机拍摄自然景象得到的照片和视频,能且只能用jpg ... 
- 毕业一年后接私活赚了10w,还拿了几家大厂offer!
			原本计划这周接着写一篇技术文章的,但是没想到忙到天天凌晨回家,几乎没有为下一篇文章做准备的时间(通常写一篇文章需要至少 30 个小时,需要搭进日常下班及周末的休息时间).这周如果写的话精力和时间都达不 ... 
- c#习题之2
			string str = null; Console.WriteLine("请输入一个字符串"); str = Console.ReadLine(); char[] c = new ... 
- c# sqlhlpear
			using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ... 
- 11 幂等 Idempotence
			11 幂等 Idempotence HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用.(注意是副作用) GET http://www.bank.com/account/123456 ... 
