如果使用自己电脑做网站,怎样做引流推广,wordpress自适应空白主题,网页设计与制作实训报告心得体会2000字day10
笔记来源于#xff1a;黑马程序员python教程#xff0c;8天python从入门到精通#xff0c;学python看这套就够了 目录 day1073、文件的读取操作文件的操作步骤open()打开函数mode常用的三种基础访问模式读操作相关方法read()方法readlines()方法readline()方法for循…day10
笔记来源于黑马程序员python教程8天python从入门到精通学python看这套就够了 目录 day1073、文件的读取操作文件的操作步骤open()打开函数mode常用的三种基础访问模式读操作相关方法read()方法readlines()方法readline()方法for循环读取文件行close() 关闭文件对象with open 语法 操作汇总 74、文件读取的课后练习字符串的 count 方法字符串的规整操作去前后指定字符串 75、文件的写操作76、文件的追加写入操作77、文件操作的综合案例78、了解异常79、异常的捕获捕获常规异常捕获指定异常捕获多个异常捕获异常并输出描述信息捕获所有异常异常else异常的finally 80、异常的传递性81、模块的概念和导入模块的导入方式import模块名from 模块名 import 功能名from 模块名 import *as 定义别名 82、自定义模块并导入测试模块\_\_all\_\_ 73、文件的读取操作
文件操作主要包括打开、关闭、读、写等操作。
文件的操作步骤
打开文件读写文件关闭文件
tips可以只打开和关闭文件不进行任何读写
open()打开函数
在Python使用open函数可以打开一个已经存在的文件或者创建一个新文件语法如下
open(name, mode, encoding)name是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
mode设置打开文件的模式(访问模式)只读、写入、追加等。
encoding编码格式推荐使用UTF-8。
示例代码
# 打开文件
f open(71_测试.txt, r, encodingUTF-8)
# w 和 a 模式下会自动创建r 模式下则不能
f open(/home/yin-roc/71_测试.txt, w, encodingUTF-8)
print(type(f))# 结果
class _io.TextIOWrappertips此时的 f 是 open 函数的文件对象对象是 Python 中一种特殊的数据类型拥有属性和方法可以使用对象属性或对象方法对其进行访问。
mode常用的三种基础访问模式
模式描述r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。w打开一个文件只用于写入。如果该文件已存在则打开文件并从开头开始编辑原有内容会被删除。 如果该文件不存在创建新文件。a打开一个文件用于追加。如果该文件已存在新的内容将会被写入到已有内容之后。 如果该文件不存在创建新文件进行写入。
读操作相关方法
read()方法
文件对象.read(num)num表示要从文件中读取的数据的长度单位是字节如果没有传入num那么就表示读取文件中所有的数据。
示例代码
# 读取文件 - read()
print(f读取 10 个字节的结果{f.read(10)})# 连续两次 read会从上一次读完的结尾开始读。
print(fread 方法读取全部内容的结果{f.read()})# 结果
读取 10 个字节的结果1234567890
read 方法读取全部内容的结果
abcdefg
hijklmn
你好呀readlines()方法
文件对象.readlines()readlines可以按照行的方式把整个文件中的内容进行一次性读取并且返回的是一个列表其中每一行的数据为一个元素。
示例代码
# 读取文件 - readlines()
lines f.readlines()
print(flines 对象的类型{type(lines)})
print(flines 对象的内容{lines})# 结果
lines 对象的类型class list
lines 对象的内容[1234567890\n, abcdefg\n, hijklmn\n, 你好呀\n]readline()方法
一次读取一行内容。
# 读取文件 - readline()
line1 f.readline()
line2 f.readline()
line3 f.readline()
print(f第一行数据是{line1})
print(f第二行数据是{line2})
print(f第三行数据是{line3})# 结果
第一行数据是1234567890第二行数据是abcdefg第三行数据是hijklmn
for循环读取文件行
# for 循环读取文件行
for line in f:print(f每一行数据是:{line})
# 每一个line临时变量就记录了文件的一行数据# 结果
每一行数据是:1234567890每一行数据是:abcdefg每一行数据是:hijklmn每一行数据是:你好呀close() 关闭文件对象
最后通过 close关闭文件对象也就是关闭对文件的占用如果不调用 close同时程序没有停止运行那么这个文件将一直被 Python 程序占用。
# 文件的关闭
f.close()
time.sleep(5) # 延时 5 swith open 语法
通过在 with open 的语句块中对文件进行操作可以在操作完成后自动关闭 close 文件避免遗忘掉 close 方法
with open(71_测试.txt, r, encodingUTF-8) as f:for line in f:print(f每一行数据是: {line})
time.sleep(5)操作汇总
操作功能文件对象 open(file, mode, encoding)打开文件获得文件对象文件对象.read(num)读取指定长度字节 不指定num读取文件全部文件对象.readline()读取一行文件对象.readlines()读取全部行得到列表for line in 文件对象for循环文件行一次循环得到一行数据文件对象.close()关闭文件对象with open() as f通过with open语法打开文件可以自动关闭
74、文件读取的课后练习
72_word.txt 内容如下
itheima itcast python
itheima python itcast
beijing shanghai itheima
shenzhen guangzhou itheima
wuhan hangzhou itheima
zhengzhou bigdata itheima示例代码
# 自写
f open(72_word.txt, r, encodingUTF-8)
count 0
for lines in f:eachline lines.replace(\n, ).split( )i 0print(eachline)while i len(eachline):if eachline[i] itheima:count 1i 1
print(fitheima 单词出现的次数:{count})
f.close()# 方式1:读取全部内容,以读取模式打开
f open(72_word.txt, r, encodingUTF-8)
content f.read()
count content.count(itheima)
print(fitheima 单词出现的次数:{count})# 方式2:读取内容,一行一行读取
count 0
f open(72_word.txt, r, encodingUTF-8)
for line in f:line line.strip() # 去除开头和结尾的空格及换行符words line.split( )# 判断单词出现次数并累计
for word in words:if word itheima:count 1
print(fitheima 单词出现的次数:{count})
# 关闭文件
f.close()# 结果
itheima 单词出现的次数:6tips
这里主要涉及几个方法的使用简化了代码比自写的代码要简洁许多
字符串的 count 方法
统计字符串中某字符串的出现次数
语法字符串.count(字符串)
字符串的规整操作去前后空格及换行符
语法字符串.strip() 字符串的规整操作去前后指定字符串
语法字符串.strip(字符串)
注意传入的是“12” 其实就是”1”和”2”都会移除是按照单个字符。
75、文件的写操作
基本语法格式
# 1. 打开文件
f open(python.txt, w)# 2.文件写入
f.write(hello world)# 3. 内容刷新
f.flush()tips
直接调用 write内容并未真正写入文件而是会积攒在程序的内存中称之为缓冲区当调用 flush 的时候内容会真正写入文件close 方法内置了 flush 功能这样做是避免频繁的操作硬盘导致效率下降攒一堆一次性写磁盘。
示例代码
1、打开一个未存在的文件 演示 对文件的写入import time# 打开不存在的文件
f open(73_test.txt, w, encodingUTF-8)
# write 写入
f.write(Hello World)# flush 刷新
# f.flush()time.sleep(5)# close 关闭
f.close() # close 方法内置了 flush 功能2、打开一个已经存在的文件
# 打开一个存在的文件
f open(73_test.txt, w, encodingUTF-8)
# write 写入 flush 刷新
f.write(黑马程序员)
# close关闭
f.close()tips
文件如果不存在使用 “w” 模式会创建新文件文件如果存在使用 “w” 模式会将原有内容清空close() 方法带有 flush() 方法的功能。
76、文件的追加写入操作
基本语法格式
# 1. 打开文件通过a模式打开即可
f open(python.txt, a)# 2.文件写入
f.write(hello world)# 3. 内容刷新
f.flush()tips
a模式文件不存在会创建文件a模式文件存在会在最后追加写入文件。
示例代码
1、打开一个不存在的文件
# 打开不存在的文件
f open(74_test.txt, a, encodingUTF-8)# write 写入
f.write(黑马程序员)# flush 刷新
f.flush()# close 关闭
f.close()2、打开一个存在的文件
# 打开一个存在的文件
f open(74_test.txt, a, encodingUTF-8)# write 写入 flush 刷新
f.write(\n学Python最佳选择)# close关闭
f.close()77、文件操作的综合案例
需求有一份账单文件记录了消费收入的具体记录内容如下
name,date,money,type,remarks
周杰轮,2022-01-01,100000,消费,正式
周杰轮,2022-01-02,300000,收入,正式
周杰轮,2022-01-03,100000,消费,测试
林俊节,2022-01-01,300000,收入,正式
林俊节,2022-01-02,100000,消费,测试
林俊节,2022-01-03,100000,消费,正式
林俊节,2022-01-04,100000,消费,测试
林俊节,2022-01-05,500000,收入,正式
张学油,2022-01-01,100000,消费,正式
张学油,2022-01-02,500000,收入,正式
张学油,2022-01-03,900000,收入,测试
王力鸿,2022-01-01,500000,消费,正式
王力鸿,2022-01-02,300000,消费,测试
王力鸿,2022-01-03,950000,收入,正式
刘德滑,2022-01-01,300000,消费,测试
刘德滑,2022-01-02,100000,消费,正式
刘德滑,2022-01-03,300000,消费,正式同学们可以将内容复制并保存为 bill.txt文件。
我们现在要做的就是
读取文件将文件写出到bill.txt.bak文件作为备份同时将文件内标记为测试的数据行丢弃。
# 自写
f_r open(75_bill.txt, r, encodingUTF-8)
f_w open(75_bill.txt.bak, a, encodingUTF-8)for line in f_r:str line.strip().split(,)flag Truefor element in str:if element 测试:flag Falseif flag True:f_w.write(line)f_r.close()
f_w.close()# 视频方法减少了复杂度但是通用性不是很高
f_r open(75_bill.txt, r, encodingUTF-8)
f_w open(75_bill.txt.bak, a, encodingUTF-8)for line in f_r:line line.strip()if line.strip(,)[4] 测试:continuef_w.write(line)f_w.write(\n)f_r.close()
f_w.close()78、了解异常
当检测到一个错误时Python解释器就无法继续执行了反而出现了一些错误的提示这就是所谓的“异常”也就是我们常说的 BUG。
79、异常的捕获
当我们的程序遇到了BUG, 那么接下来有两种情况
整个程序因为一个BUG停止运行对BUG进行提醒整个程序继续运行。
显然在之前的学习中我们所有的程序遇到 BUG 就会出现1的这种情况也就是整个程序直接奔溃。
但是在真实工作中我们肯定不能因为一个小的 BUG 就让整个程序全部奔溃也就是我们希望的是达到2的这种情况那这里我们就需要使用到捕获异常。
捕获异常的作用在于提前假设某处会出现异常做好提前准备当真的出现异常的时候可以有后续手段。
捕获常规异常
基本语法
try:可能发生错误的代码
except:如果出现异常执行的代码示例
# 基本捕获语法
try:f open(76_abc.txt, r, encodingUTF-8)
except:print(出现异常了因为文件不存在我将open的模式改为w模式去打开)f open(76_abc.txt, w, encodingUTF-8)# 结果
出现异常了因为文件不存在我将open的模式改为w模式去打开捕获指定异常
基本语法
try:print(name)
except NameError as e:print(出现了变量未定义的异常)print(e)# 结果
出现了变量未定义的异常
name name is not definedtips
如果尝试执行的代码的异常类型和要捕获的异常类型不一致则无法捕获异常。一般try下方只放一行尝试执行的代码。
捕获多个异常
当捕获多个异常时可以把要捕获的异常类型的名字放到except 后并使用元组的方式进行书写。
基本语法
try:print(1/0)
except (NameError, ZeroDivisionError):print(ZeroDivision错误...)示例代码
# 捕获多个异常
try:# 1 / 0print(name)pass
except(NameError, ZeroDivisionError) as e:print(出现了变量未定义 或者 除以 0 的异常错误)# 结果
出现了变量未定义 或者 除以 0 的异常错误捕获异常并输出描述信息
基本语法
try:print(num)
except (NameError, ZeroDivisionError) as e:print(e)捕获所有异常
基本语法
try:print(name)
except Exception as e:print(e)异常else
else表示的是如果没有异常要执行的代码。
try:print(1)
except Exception as e:print(e)
else:print(我是else是没有异常的时候执行的代码)异常的finally
finally表示的是无论是否异常都要执行的代码例如关闭文件。
try:f open(test.txt, r)
except Exception as e:f open(test.txt, w)
else:print(没有异常真开心)
finally:f.close()示例代码
# 捕获所有异常
try:f open(76_abc.txt, r, encodingUTF-8)# 1/0# print(name)except Exception as e:print(出现异常了)f open(76_abc.txt, w, encodingUTF-8)
else:print(好高兴没有异常)
finally:print(我是finally有没有异常我都要执行)f.close()80、异常的传递性
异常是具有传递性的
当函数 func01 中发生异常并且没有捕获处理这个异常的时候异常会传递到函数func02当 func02 也没有捕获处理这个异常的时候
main函数会捕获这个异常, 这就是异常的传递性。
提示当所有函数都没有捕获异常的时候, 程序就会报错 示例代码 演示异常的传递性
# 定义一个出现异常的方法
def func1():print(func1 开始执行)num 1 / 0 # 肯定有异常除以 0 的异常print(func1 结束执行)# 定义一个无异常的方法调用上面的方法
def func2():print(func2 开始执行)func1()print(func2 结束执行)# 定义一个方法调用上面的方法
def main():try:func2()except Exception as e:print(f出现异常了异常信息是{e})main()81、模块的概念和导入
Python 模块(Module)是一个 Python 文件以 .py 结尾. 模块能定义函数类和变量模块里也能包含可执行的代码.
模块的作用python中有很多各种不同的模块每一个模块都可以帮助我们快速的实现一些功能比如实现和时间相关的功能就可以使用time模块。
我们可以认为一个模块就是一个工具包每一个工具包中都有各种不同的工具供我们使用进而实现各种不同的功能。
模块的导入方式
基本语法格式
常用的组合形式如
import 模块名from 模块名 import 类、变量、方法等from 模块名 import *import 模块名 as 别名from 模块名 import 功能名 as 别名。
import模块名
基本语法格式
import 模块名
import 模块名1模块名2模块名.功能名()示例代码
# 使用 python 导入 time 模块使用 sleep 功能(函数)
import time # 导入 Python 内置的 time 模块 (time.py这个代码文件)print(你好)
time.sleep(5) # 通过 . 就可以使用模块内部的全部功能(类\函数\变量)
print(我好)from 模块名 import 功能名
基本语法格式
from 模块名 import 功能名功能名()示例代码
# 使用 from 导入 time 模块,使用 sleep 功能 (函数)
from time import sleep
print(nihao)
sleep(5)
print(wohao)from 模块名 import *
基本语法格式
from 模块名 import *功能名()示例代码
# 使用 * 导入 time 模块的全部功能
from time import * # *:表示全部的意思
print(nihao)
sleep(5)
print(wohao)as 定义别名
基本语法格式
# 模块定义别名
import 模块名 as 别名# 功能定义别名
from 模块名 import 功能 as 别名示例代码
# 使用 as 给特定功能加上别名
import time as t
print(你好)
t.sleep(5)
print(我好)from time import sleep as sl # *:表示全部的意思
print(nihao)
sl(5)
print(wohao)82、自定义模块并导入
Python中已经帮我们实现了很多的模块。不过有时候我们需要一些个性化的模块这里就可以通过自定义模块实现也就是自己制作一个模块。
案例新建一个Python文件命名为my_module1.py并定义test函数
tips 每个Python文件都可以作为一个模块模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则。
测试模块
在实际开发中当一个开发人员编写完一个模块后为了让模块能够在项目中达到想要的效果这个开发人员会自行在py文件中添加一些测试信息例如在my_module1.py文件中添加测试代码test(1,1)。
def test(a, b):print(a b)test(1, 1)问题:
此时无论是当前文件还是其他已经导入了该模块的文件在运行的时候都会自动执行test 函数的调用。
解决方案
def test(a, b):print(a b)# 只在当前文件中调用该函数其他导入的文件内不符合该条件则不执行test函数调用
if __name__ __main__:test (1, 1)tips 注意事项当导入多个模块的时候且模块内有同名功能. 当调用这个同名功能的时候调用到的是后面导入的模块的功能
__all__
如果一个模块文件中有 __all__ 变量当使用 from xxx import * 导入时只能导入这个列表中的元素。