文件处理

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的更多相关文章

  1. python 基础回顾 一

    Python 基础回顾 可变类型:list ,dict 不可变类型:string,tuple,numbers tuple是不可变的,但是它包含的list dict是可变的. set 集合内部是唯一的 ...

  2. python基础回顾1

    定义 tuple(元组), list (表) #!/usr/bin/env python # encoding: utf-8 a = 10 #定义一直变量,无需声明 s1 = (2,1.3,'love ...

  3. python基础回顾

    1.第二个缺点就是代码不能加密.如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows 上常见的xxx.exe ...

  4. python基础回顾笔记

    1.知道了什么是编程语言 2.知道了python.C#.Java都是语言的种类 3.python:有很多种 cpython.pypy.jpython... 4.python的执行方式有两种: 解释器 ...

  5. day001|python基础回顾

    1.python是一门编程语言 编程语言是人与计算机能够沟通的一种语言 人----------编程语言---------计算机 2.编程是: ①人将要做的事的步骤想清楚 ②找计算机能够听懂的语言将步骤 ...

  6. day002|python基础回顾2

    目录 00 上节课复习 01 基本数据类型 02 与用户交互 03 运算符 04 流程运算之if判断 05 流程判断之while循环 06 TEST 00 上节课复习 ""&quo ...

  7. python高级(1)—— 基础回顾1

    Python基础回顾 认识变量 在学习了之前的Python零基础入门系列[洗礼灵魂,修炼Python](说明一下,这个系列现在回过来再来看这个名字确实好土啊,然后有些知识点感觉还不太精准,后期看如果有 ...

  8. python学习笔记(1):python基础

    python基础回顾 1.Ipython魔术命令 %timeit //多次执行一条语句,并返回平均时间,%%time->多条语句,用于测试一条语句用了多少时间 %time //返回执行一条语句的 ...

  9. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

随机推荐

  1. 直接理解转置卷积(Transposed convolution)的各种情况

    使用GAN生成图像必不可少的层就是上采样,其中最常用的就是转置卷积(Transposed Convolution).如果把卷积操作转换为矩阵乘法的形式,转置卷积实际上就是将其中的矩阵进行转置,从而产生 ...

  2. 【总结】mybatis

    一.config配置文件详解 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE config ...

  3. Serilog 源码解析——总览

    背景 大家好,考虑到在最近这些天,闲来无事,找了个类库好好研究下别人写的高质量代码,颇有收获,打算和大家分享下.考虑到最近在自学 ASP.NET Core 的相关开发,对 Serilog 这个日志记录 ...

  4. 浅析 JIT 即时编译技术

    即时编译回顾 HotSpot 虚拟机执行 Java 程序时,先通过解释器对代码解释执行,发现某个方法或代码块执行比较频繁后,对热点代码进行编译,编译后生成与本地平台相关的机器码,再去执行机器码获得较高 ...

  5. 《Clojure编程》笔记 第5章 宏

    目录 背景简述 第5章 宏 5.0 术语 5.1 宏到底是什么 5.1.1 宏不是什么 5.1.2 有什么是宏能做而函数不能做的 5.1.3 宏vsRuby的eval 5.2 编写你的第一个宏 5.3 ...

  6. 揭秘仿比心app源码的开发背后,功能是如何实现的

    约单陪玩系统作为最近兴起的开发热点,引起了竞相开发,其中比心源码可以说是行业内运营级别的APP中功能比较齐全的,那么仿比心app源码的功能是如何实现的呢,接下来就带大家简单分析一下. 仿比心app源码 ...

  7. 子线程调用invalidate()产生“Only the original thread that created a view hierarchy can touch its views.”原因分析

    目录 1.异常出处 2.从View.invalidate()方法开始分析 3.ViewRootImpl如何与View进行关联:从Activity的setContentView开始分析 3.1 最顶层的 ...

  8. ubuntu18.04 安装RabbitVCS

    因为仓库安装一直安装不上所以手动安装 第一步:下载 https://github.com/rabbitvcs/rabbitvcs/ 安装 解压安装 python setup.py install -- ...

  9. C++ 基础 5:多态

    1 什么是多态 多态按字面的意思就是多种形态.当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态. C++ 多态意味着由继承而产生的相关的不同的类,调用重写函数时,会根据实际的对象类型来执 ...

  10. 第一次本地代码提交到github

    1.在个github上创建一个库 2.创建成功后,可以看到自己的仓库地址 3.在本地新建一个文件夹,并通过个git clone将仓库克隆到本地,并进入文件夹下 4.将需要提交的代码放入文件下,然后在终 ...