python文件I/O_file_异常_模块_第三方包_颜色组件_爆破密_ping机主存活(03)

python文件I/O_file_异常_模块_第三方包_颜色组件_爆破密_ping机主存活(03)

文章目录

    • python文件I/O_file_异常_模块_第三方包_颜色组件_爆破密_ping机主存活(03)
      • [1 文件读取](#1 文件读取)
        • [1.1 read() 方法:](#1.1 read() 方法:)
        • [1.2 readlines()方法:](#1.2 readlines()方法:)
        • [1.3 read() 使用案例:](#1.3 read() 使用案例:)
            • [1.3.1 text.txt文件内容是](#1.3.1 text.txt文件内容是)
            • [1.3.2 py执行文件](#1.3.2 py执行文件)
            • [1.3.3 打印结果:注意:执行两次read() 方法,第二次会在read后面的下标继续读取](#1.3.3 打印结果:注意:执行两次read() 方法,第二次会在read后面的下标继续读取)
            • [1.4 for循环读取文件行](#1.4 for循环读取文件行)
            • [1.5 练习读取统计某个字符出现的次数](#1.5 练习读取统计某个字符出现的次数)
        • [1.4 read读取方法汇总](#1.4 read读取方法汇总)
      • [2 文件的写入](#2 文件的写入)
        • [2.1 write()文件的写入:](#2.1 write()文件的写入:)
          • [2.1.1 bill.txt内容](#2.1.1 bill.txt内容)
          • [2.1.2 py执行文件,备份文件写入](#2.1.2 py执行文件,备份文件写入)
      • [3 文件追加内容](#3 文件追加内容)
        • [3.1 在没有文件,a自动创建文件追加内容案例:](#3.1 在没有文件,a自动创建文件追加内容案例:)
        • [3.2 继续a写入追加内容:](#3.2 继续a写入追加内容:)
        • [3.3 总结](#3.3 总结)
      • [4 异常处理](#4 异常处理)
      • [5 模块导入导出](#5 模块导入导出)
        • [5.1 import基本语法:](#5.1 import基本语法:)
        • [5.2 import案例:导入time模块,需要time.sleep()调用](#5.2 import案例:导入time模块,需要time.sleep()调用)
        • [5.3 from基本语法:](#5.3 from基本语法:)
        • [5.4 from案例:导入time模块中的sleep方法,可以直接写sleep调用](#5.4 from案例:导入time模块中的sleep方法,可以直接写sleep调用)
        • [5.5 from案例:导入time模块中的*](#5.5 from案例:导入time模块中的*)
      • [6 自定义模块](#6 自定义模块)
        • [6.1 外部导入不让函数自运行](#6.1 外部导入不让函数自运行)
        • [6.2 ` [all]`变量](#6.2 [__all__]变量)
        • [6.3 总结](#6.3 总结)
      • [7 自定义python包](#7 自定义python包)
        • [7.1 步骤如下](#7.1 步骤如下)
        • [7.2 pycharm中基本步骤(创建包)](#7.2 pycharm中基本步骤(创建包))
        • [7.3 导入自定义包](#7.3 导入自定义包)
        • [7.4 总结](#7.4 总结)
      • [8 第三方包](#8 第三方包)
        • [8.1 什么是第三方包](#8.1 什么是第三方包)
        • [8.2 安装第三方包](#8.2 安装第三方包)
        • [8.3 pip的网络优化](#8.3 pip的网络优化)
        • [8.4 pycharm 安装第三方包](#8.4 pycharm 安装第三方包)
          • [8.4.1 点击右下角的python -->选择inter setting](#8.4.1 点击右下角的python -->选择inter setting)
          • [8.4.2 点击+](#8.4.2 点击+)
          • [8.4.3 选择后选择install安装--》关闭窗口--》确定后台进行下载](#8.4.3 选择后选择install安装--》关闭窗口--》确定后台进行下载)
          • [8.4.4 后台进行下载状态](#8.4.4 后台进行下载状态)
      • [9 颜色组件](#9 颜色组件)
          • [9.1 安装](#9.1 安装)
          • [9.2 导入到 Python 中,并打印带有颜色的文本:](#9.2 导入到 Python 中,并打印带有颜色的文本:)
      • [10 读取密码爆破脚本](#10 读取密码爆破脚本)
      • [11 发送主机ping包(主机存活)](#11 发送主机ping包(主机存活))
        • 11.01安装scapy包
        • [11.02 查看安装包的版本](#11.02 查看安装包的版本)
        • [11.03 ping代码](#11.03 ping代码)
      • [12 主机存活代码优化](#12 主机存活代码优化)
        • [12.1 屏蔽WARNING的信息和不显示点 verbose= False](#12.1 屏蔽WARNING的信息和不显示点 verbose= False)
      • [1 文件读取](#1 文件读取)
        • [1.1 read() 方法:](#1.1 read() 方法:)
        • [1.2 readlines()方法:](#1.2 readlines()方法:)
        • [1.3 read() 使用案例:](#1.3 read() 使用案例:)
            • [1.3.1 text.txt文件内容是](#1.3.1 text.txt文件内容是)
            • [1.3.2 py执行文件](#1.3.2 py执行文件)
            • [1.3.3 打印结果:注意:执行两次read() 方法,第二次会在read后面的下标继续读取](#1.3.3 打印结果:注意:执行两次read() 方法,第二次会在read后面的下标继续读取)
            • [1.4 for循环读取文件行](#1.4 for循环读取文件行)
            • [1.5 练习读取统计某个字符出现的次数](#1.5 练习读取统计某个字符出现的次数)
        • [1.4 read读取方法汇总](#1.4 read读取方法汇总)
      • [2 文件的写入](#2 文件的写入)
        • [2.1 write()文件的写入:](#2.1 write()文件的写入:)
          • [2.1.1 bill.txt内容](#2.1.1 bill.txt内容)
          • [2.1.2 py执行文件,备份文件写入](#2.1.2 py执行文件,备份文件写入)
      • [3 文件追加内容](#3 文件追加内容)
        • [3.1 在没有文件,a自动创建文件追加内容案例:](#3.1 在没有文件,a自动创建文件追加内容案例:)
        • [3.2 继续a写入追加内容:](#3.2 继续a写入追加内容:)
        • [3.3 总结](#3.3 总结)
      • [4 异常处理](#4 异常处理)
      • [5 模块导入导出](#5 模块导入导出)
        • [5.1 import基本语法:](#5.1 import基本语法:)
        • [5.2 import案例:导入time模块,需要time.sleep()调用](#5.2 import案例:导入time模块,需要time.sleep()调用)
        • [5.3 from基本语法:](#5.3 from基本语法:)
        • [5.4 from案例:导入time模块中的sleep方法,可以直接写sleep调用](#5.4 from案例:导入time模块中的sleep方法,可以直接写sleep调用)
        • [5.5 from案例:导入time模块中的*](#5.5 from案例:导入time模块中的*)
      • [6 自定义模块](#6 自定义模块)
        • [6.1 外部导入不让函数自运行](#6.1 外部导入不让函数自运行)
        • [6.2 ` [all]`变量](#6.2 [__all__]变量)
        • [6.3 总结](#6.3 总结)
      • [7 自定义python包](#7 自定义python包)
        • [7.1 步骤如下](#7.1 步骤如下)
        • [7.2 pycharm中基本步骤(创建包)](#7.2 pycharm中基本步骤(创建包))
        • [7.3 导入自定义包](#7.3 导入自定义包)
        • [7.4 总结](#7.4 总结)
      • [8 第三方包](#8 第三方包)
        • [8.1 什么是第三方包](#8.1 什么是第三方包)
        • [8.2 安装第三方包](#8.2 安装第三方包)
        • [8.3 pip的网络优化](#8.3 pip的网络优化)
        • [8.4 pycharm 安装第三方包](#8.4 pycharm 安装第三方包)
          • [8.4.1 点击右下角的python -->选择inter setting](#8.4.1 点击右下角的python -->选择inter setting)
          • [8.4.2 点击+](#8.4.2 点击+)
          • [8.4.3 选择后选择install安装--》关闭窗口--》确定后台进行下载](#8.4.3 选择后选择install安装--》关闭窗口--》确定后台进行下载)
          • [8.4.4 后台进行下载状态](#8.4.4 后台进行下载状态)
      • [9 颜色组件](#9 颜色组件)
          • [9.1 安装](#9.1 安装)
          • [9.2 导入到 Python 中,并打印带有颜色的文本:](#9.2 导入到 Python 中,并打印带有颜色的文本:)
      • [10 读取密码爆破脚本](#10 读取密码爆破脚本)
      • [11 发送主机ping包(主机存活)](#11 发送主机ping包(主机存活))
        • 11.01安装scapy包
        • [11.02 查看安装包的版本](#11.02 查看安装包的版本)
        • [11.03 ping代码](#11.03 ping代码)
      • [12 主机存活代码优化](#12 主机存活代码优化)
        • [12.1 屏蔽WARNING的信息和不显示点 verbose= False](#12.1 屏蔽WARNING的信息和不显示点 verbose= False)

1 文件读取

​ 参考视频:黑马保姆级视频

1.1 read() 方法:
文件对象.read(num)

num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。
1.2 readlines()方法:

eadlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

f=open('python.txt')
content=f.readlines()
print(content) # ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']

#关闭文件
f.close()
1.3 read() 使用案例:
1.3.1 text.txt文件内容是
在岁月的轮回里,
藏着世间的种种美,
高山巍峨耸入云霄,
江河奔腾破浩渺。
1.3.2 py执行文件
# 打开文件
f = open("D:/test.txt","r", encoding="UTF-8")
print(type(f))

print(f"读取10个字节:{f.read(10)}")
print(f"read方法读取全部内容的结果:{f.read()}")
1.3.3 打印结果:注意:执行两次read() 方法,第二次会在read后面的下标继续读取
<class '_io.TextIOWrapper'>
读取10个字节:在岁月的轮回里,
藏
read方法读取全部内容的结果:着世间的种种美,
高山巍峨耸入云霄,
江河奔腾破浩渺。
1.4 for循环读取文件行
# 打开文件
f = open("D:/test.txt","r", encoding="UTF-8")
print(type(f))
for line in f:
    print(f"读取10个字节:{line}")
f.close()

打印结果:

<class '_io.TextIOWrapper'>
读取10个字节:在岁月的轮回里,

读取10个字节:藏着世间的种种美,

读取10个字节:高山巍峨耸入云霄,

读取10个字节:江河奔腾破浩渺。
1.5 练习读取统计某个字符出现的次数
=====test.txt内容========
itheima itcast python
itheima python itcast
beijing shanghai itheima
=======思路======= 
第一种. read() , count("itheima")
第二种.一行行的读取文件 按照空格切分,统计itheima的次数
===============
方式一:
f = open("D:/test.txt","r", encoding="UTF-8")
content = f.read()  # 读取全部内容
count = content.count("itheima")
print(f"的在文件中出现了:{count}次")
f.close()

打印结果: 3次

方式二:
f = open("D:/test.txt","r", encoding="UTF-8")
count = 0
for line in f:
	line = line.strip()
	words = line.split(" ") # 以空格分隔
	print(words)  # 打印每一行有个换行符 ['itheima', 'itcast', 'python\n']...,使用strip()
	for word in words:
		if word == "itheima":
			count += 1
print(count)
f.close()

打印结果出现:3次
1.4 read读取方法汇总
操作 功能
文件对象 = open(file, mode, encoding) 打开文件获得文件对象
文件对象.read(num) 读取指定长度字节 不指定num读取文件全部
文件对象.readline() 读取一行
文件对象.readlines() 读取全部行,得到列表
for line in 文件对象 for line in 文件对象for循环文件行,一次循环得到一行数据
文件对象.close() 关闭文件对象
with open() as f 通过with open语法打开文件,可以自动关闭

2 文件的写入

注意:

直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区。

当调用flush的时候,内容会真正写入文件; 这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)。

#1.打开文件
f=open('python.txt','w')

#2.文件写入
f write(hello world)

#3.内容刷新
f.flush()
2.1 write()文件的写入:

1.写入文件使用open函数的模式进行写入

2.写入的方法有:

wirte(),写入内容

flush(),刷新内容到硬盘中

注意事项:
w模式,文件不存在,会创建新文件
w模式,文件存在,会清空原有内容
close()方法,带有flush()方法的功能

2.1.1 bill.txt内容
周轮,2022-01-01,100000,消费,正式
周轮,2022-01-02,300000,收入,正式
周轮,2022-01-03,100000,消费,测试
2.1.2 py执行文件,备份文件写入
python 复制代码
fr =open("D:/test.txt", "r", encoding="UTF-8")  # 打开文件得到文件对象,准备读取
fw =open("D:/bill.txt.bak", "w", encoding="UTF-8")  #打开文件得到文件对象,准备写入

# for 循环读取文件
for line in fr:
	line = line.strip()
	if line.split(",")[4] == "测试": # 判断内容,将满足的内容写出
		continue
	fw.write(line)  # 将内容写出去
	fw.write("\n")  #由于前面对内容进行了strip()的操作,所以要手动的写出换行符
fr.close()
fw.close()   # close内置flush()功能,flush將内存的文件写入磁盘

3 文件追加内容

a模式打开就是追加内容

#1.打开文件,通过a模式打开即可
f=open('python.txt', 'a')

#2.文件写入
f.write('hello world')

#3.内容刷新
f.flush()

注意:
a模式,文件不存在会创建文件
a模式,文件存在会在最后,追加写入文件

3.1 在没有文件,a自动创建文件追加内容案例:
#打开文,不存在文件
f = open("D:/test1.txt","a",encoding="UTF-8")  #write写入
f.write("heima程序员")
f.flush()  #flush新
f.close()  #close关闭

# 打开路径,自动test1.txt文件及追加了内容
3.2 继续a写入追加内容:
f = open("D:/test1.txt", "a", encoding="UTF-8")  #打开一个存在的文件

f.write("\npython最佳保姆式") # write写入 \n换行

f.close()  #close关闭
3.3 总结
1追加写入文件使用open函数的"a"模式进行写入

2.追加写入的方法有(和w模式一致):
	wirte(),写入内容
	flush(),刷新内容到硬盘中
	
3.注意事项:
	a模式,文件不存在,会创建新文件
	a模式,文件存在,会在原有内容后面继续写入
	可以使用"\n"来写出换行符

4 异常处理

​ 参考视频:黑马保姆级视频

异常的特性

​ 异常是具有传递性的

​ 当函数func01中发生异常,并且没有捕获处理这个异常的时候,

​ 异常会传递到函数func02,当func02也没有捕获处理这个异常的时候

​ main函数会捕获这个异常, 这就是异常的传递性.

注意:
当所有函数都没有捕获异常的时候,程序就会报错

python 复制代码
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()

打印結果

func2 开始执行
func1 开始执行
出现异常了,异常的信息是:division by zero

5 模块导入导出

参考视频:黑马高质量保姆级视频

模块在使用前需要先导入,导入的语法如下:

[from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]   # from是针对模块中某个方法去使用

模块的导入方式:

常用的组合形式如:
    import 模块名
    from   模块名  import  类、变量、方法等
    from   模块名  import  *
    import 模块名  as  别名
    from   模块名  import  功能名  as  别名
5.1 import基本语法:
import 模块名
import 模块名1,模块名2

模块名.功能名()
5.2 import案例:导入time模块,需要time.sleep()调用
#导入时间模块
import time

print("开始")
#让程序睡眠1秒(阻塞)
time.sleep(1)
print("结束")
5.3 from基本语法:

​ 针对模块中的某个方法去使用

from 模块名 import 功能名
功能名()

注意:
from time import *  # 是将某块中所有方法都导入
5.4 from案例:导入time模块中的sleep方法,可以直接写sleep调用
#导入time时间模块中的sleep方法
from time import sleep

print("开始")
#让程序睡眠1秒(阻塞)
sleep(1)
print("结束")
5.5 from案例:导入time模块中的*

案例:导入time模块中所有的方法,可以直接写sleep调用

#导入时间模块中所有的方法
from time import *

print("开始")
#让程序睡眠1秒(阻塞)
sleep(1)
print("结束")

6 自定义模块

参考视频:黑马保姆级高质量视频

6.1 外部导入不让函数自运行
my_modulel.py文件
def test(a, b):
	print(a + b)

if __name__ == '__main__': # 加入这个函数,也可以单独测试运行定义的函数
	test(1,2)
6.2 [__all__]变量

不写__all__全部都可以用,写了all只能用列表里面的函数,all只是限定在*上

6.3 总结
 1.如何自定义模块并导入?
    在Python代码文件中正常写代码即可,通过import、from关键字和导
    入Python内置模块一样导入即可使用。

2._main_变量的功能是?
    if __main__=="_main_"表示,只有当程序是直接执行的才会进入
    if内部,如果是被导入的,则if无法进入
    
3.注意事项
	不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的

7 自定义python包

参考视频:黑马保姆级视频

基于Python模块,我们可以在编写代码的时候,导入许
多外部代码来丰富功能。
但是,如果Python的模块太多了,就可能造成一定的混
乱,那么如何管理呢?
通过Python包的功能来管理。
7.1 步骤如下
7.2 pycharm中基本步骤(创建包)

​ 选项目根目录 ---》右键 [new] --> [Python Packag] --->输入包名(如my_package) --> OK -->新建功能模块

​ 注意: 新建包后如(my_package),包内部会自动创建 __init__.py文件,这个文件控制着包的导入行为 如 [__all__ =['my_module1']]

​ 在包里可以新建文件*.py --》各自功能 *.py文件

7.3 导入自定义包
import my_package.my_modulel
import my_package.my_module2

my_package.my_modulel.info_print1()   #使用包里面函数


或者优化导入:
import my_package.my_module2 import info_print1

info_print1()   #使用包里面函数
7.4 总结
1.什么是Python的包?
  包就是一个文件夹,里面可以存放许多Python的模块(代码文件),通
  过包,在逻辑上将一批模块归为一类,方便使用。
    
2._init_.py文件的作用?
  创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是
  Python的包,而非普通的文件夹。
	
3.all变量的作用?
	同模块中学习到的是一个作用,控制import*能够导入的内容

8 第三方包

参考视频:黑马保姆级视频

8.1 什么是第三方包

我们知道,包可以包含一堆的Python模块,而每个模块又内含许多的功能。

所以,我们可以认为 : 一个包,就是一堆同类型功能的集合体。

在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:

科学计算中常用的: numpy包

数据分析中常用的: pandas包

大数据计算中常用的: pyspark、apache-flink包

图形可视化常用的: matplotlib、pyecharts

人工智能常用的: tensorflow

8.2 安装第三方包

安装第三方包-pip

第三方包的安装非常简单,我们只需要使用Python内置的pip程序即可。

打开我们许久未见的:命令提示符程序,在里面输入:

pipinstall包名称

即可通过网络快速安装第三方包

命令提示符cmd进行安装:

C:\Users\javac>pip install numpy
8.3 pip的网络优化

由于pip是连接的国外的网站进行包的下载,所以有的时候会速度很慢。

我们可以通过如下命令,让其连接国内的网站进行包的安装:

pip install -i https://pyp.ituna.tsinghua.edu.cn/simple 包名称

命令提示符cmd
C:\Users\javac> pip install	 -i https://pypi.tuna.tsinghua.edu.cn/simple numpy

https://pypi.tuna.tsinghua.edu.cn/simple 是清华大学提供的一个网站,可供pip程序下载第三方包

测试验证安装是否成功

8.4 pycharm 安装第三方包
8.4.1 点击右下角的python -->选择inter setting
8.4.2 点击+
8.4.3 选择后选择install安装--》关闭窗口--》确定后台进行下载
8.4.4 后台进行下载状态

9 颜色组件

9.1 安装
pip install colorama # 安装组件
9.2 导入到 Python 中,并打印带有颜色的文本:
from colorama import init, Fore, Back, Style

# 初始化 colorama
init()

# 使用不同的颜色打印文本
print(Fore.RED + '红色的文本')
print(Back.GREEN + '绿色背景的文本')
print(Fore.YELLOW + Back.BLUE + '黄色文字和蓝色背景的文本')

# 重置颜色(切换回默认颜色)
print(Style.RESET_ALL + '这是默认颜色的文本')

10 读取密码爆破脚本

import crypt
import colorama

# 定义密码
shaw_line = "root:$y$j9T$b8VajevNPKrgCkOfpJaZf.$87w.72igkRq6sPzbDOnaqTh4o3l4TkDWEagTPHq4K2C:19597:0:99999:7:::"

# 以:进行分割,组合密文组合,取下标1的值
crypt_text = shaw_line.split(":")[1]

print(crypt_text)
#密码中获取盐值
salt = crypt_text[0:crypt_text.rindex("$")]

file_path = "/home/kali/mytestcode/test.text"
with open( file=file_path, mode= "r") as f:
    for line in f:
        passwd = line.strip() 
        print(f"\r{colorama.Fore.RED}[-] Trying password: {passwd}", end= "")

        # passwd = "weiwei"
        # 明文和盐值组合密文
        new_crypt_text = crypt.crypt(passwd, salt)
        # 对比是否相等_crypt
        if new_crypt_text == crypt_text:
            print(f"{colorama.Fore.RED}[+] PASSWORD FOUND:{passwd}" )
    print(f"[-] pwssword not fo")

11 发送主机ping包(主机存活)

11.01安装scapy包
pip show scapy
11.02 查看安装包的版本
import scapy
print(scapy.__version__)
11.03 ping代码
from scapy.layers.inet import *

netmast = "10.9.75."
src="10.9.75.160"

for i in range(1,5):
    dst = f"{netmast}{i}"
    # print(dst)
    pkt = IP(src= src, dst= dst)/ICMP() # src目标地址, dst循环的地址
    res = sr1(pkt, timeout=1)
    if res and res.type == 0:
        print(f"{dst} is ALIVE!")

打印结果:

Received 46 packets, got 0 answers, remaining 1 packets
10.9.75.4
Begin emission:
WARNING: Mac address to reach destination not found. Using broadcast.
Finished sending 1 packets.
....................................................................................................................................................

12 主机存活代码优化

12.1 屏蔽WARNING的信息和不显示点 verbose= False
屏蔽WARNING的信息
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)  # 只有报错时才显示



不显示点
res = sr1(pkt, timeout=1, verbose= False)

最终优化后:

from scapy.layers.inet import *
from colorama import init, Fore, Back, Style

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

netmast = "10.9.75."  # 遍历扫描地址前缀
src="10.9.75.160"   # 自己的主机


for i in range(1,5):
    dst = f"{netmast}{i}"
    # print(dst)
    pkt = IP(src= src, dst= dst)/ICMP() # src目标地址, dst循环的地址
    res = sr1(pkt, timeout=1, verbose= False)
    if res and res.type == 0:
        print(Fore.RED + f"{dst} is ALIVE!")  # Fore.RED增加颜色

打印结果:

10.9.75.1 is ALIVE!

1 文件读取

​ 参考视频:黑马保姆级视频

1.1 read() 方法:
文件对象.read(num)

num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。
1.2 readlines()方法:

eadlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

python 复制代码
f=open('python.txt')
content=f.readlines()
print(content) # ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']

#关闭文件
f.close()
1.3 read() 使用案例:
1.3.1 text.txt文件内容是
在岁月的轮回里,
藏着世间的种种美,
高山巍峨耸入云霄,
江河奔腾破浩渺。
1.3.2 py执行文件
python 复制代码
# 打开文件
f = open("D:/test.txt","r", encoding="UTF-8")
print(type(f))

print(f"读取10个字节:{f.read(10)}")
print(f"read方法读取全部内容的结果:{f.read()}")
1.3.3 打印结果:注意:执行两次read() 方法,第二次会在read后面的下标继续读取
python 复制代码
<class '_io.TextIOWrapper'>
读取10个字节:在岁月的轮回里,
藏
read方法读取全部内容的结果:着世间的种种美,
高山巍峨耸入云霄,
江河奔腾破浩渺。
1.4 for循环读取文件行
python 复制代码
# 打开文件
f = open("D:/test.txt","r", encoding="UTF-8")
print(type(f))
for line in f:
    print(f"读取10个字节:{line}")
f.close()

打印结果:

<class '_io.TextIOWrapper'>
读取10个字节:在岁月的轮回里,

读取10个字节:藏着世间的种种美,

读取10个字节:高山巍峨耸入云霄,

读取10个字节:江河奔腾破浩渺。
1.5 练习读取统计某个字符出现的次数
python 复制代码
=====test.txt内容========
itheima itcast python
itheima python itcast
beijing shanghai itheima
=======思路======= 
第一种. read() , count("itheima")
第二种.一行行的读取文件 按照空格切分,统计itheima的次数
===============
方式一:
f = open("D:/test.txt","r", encoding="UTF-8")
content = f.read()  # 读取全部内容
count = content.count("itheima")
print(f"的在文件中出现了:{count}次")
f.close()

打印结果: 3次

方式二:
f = open("D:/test.txt","r", encoding="UTF-8")
count = 0
for line in f:
	line = line.strip()
	words = line.split(" ") # 以空格分隔
	print(words)  # 打印每一行有个换行符 ['itheima', 'itcast', 'python\n']...,使用strip()
	for word in words:
		if word == "itheima":
			count += 1
print(count)
f.close()

打印结果出现:3次
1.4 read读取方法汇总
操作 功能
文件对象 = open(file, mode, encoding) 打开文件获得文件对象
文件对象.read(num) 读取指定长度字节 不指定num读取文件全部
文件对象.readline() 读取一行
文件对象.readlines() 读取全部行,得到列表
for line in 文件对象 for line in 文件对象for循环文件行,一次循环得到一行数据
文件对象.close() 关闭文件对象
with open() as f 通过with open语法打开文件,可以自动关闭

2 文件的写入

注意:

直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区。

当调用flush的时候,内容会真正写入文件; 这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)。

python 复制代码
#1.打开文件
f=open('python.txt','w')

#2.文件写入
f write(hello world)

#3.内容刷新
f.flush()
2.1 write()文件的写入:

1.写入文件使用open函数的模式进行写入

2.写入的方法有:

wirte(),写入内容

flush(),刷新内容到硬盘中

注意事项:
w模式,文件不存在,会创建新文件
w模式,文件存在,会清空原有内容
close()方法,带有flush()方法的功能

2.1.1 bill.txt内容
周轮,2022-01-01,100000,消费,正式
周轮,2022-01-02,300000,收入,正式
周轮,2022-01-03,100000,消费,测试
2.1.2 py执行文件,备份文件写入
python 复制代码
fr =open("D:/test.txt", "r", encoding="UTF-8")  # 打开文件得到文件对象,准备读取
fw =open("D:/bill.txt.bak", "w", encoding="UTF-8")  #打开文件得到文件对象,准备写入

# for 循环读取文件
for line in fr:
	line = line.strip()
	if line.split(",")[4] == "测试": # 判断内容,将满足的内容写出
		continue
	fw.write(line)  # 将内容写出去
	fw.write("\n")  #由于前面对内容进行了strip()的操作,所以要手动的写出换行符
fr.close()
fw.close()   # close内置flush()功能,flush將内存的文件写入磁盘

3 文件追加内容

a模式打开就是追加内容

python 复制代码
#1.打开文件,通过a模式打开即可
f=open('python.txt', 'a')

#2.文件写入
f.write('hello world')

#3.内容刷新
f.flush()

注意:
a模式,文件不存在会创建文件
a模式,文件存在会在最后,追加写入文件

3.1 在没有文件,a自动创建文件追加内容案例:
python 复制代码
#打开文,不存在文件
f = open("D:/test1.txt","a",encoding="UTF-8")  #write写入
f.write("heima程序员")
f.flush()  #flush新
f.close()  #close关闭

# 打开路径,自动test1.txt文件及追加了内容
3.2 继续a写入追加内容:
python 复制代码
f = open("D:/test1.txt", "a", encoding="UTF-8")  #打开一个存在的文件

f.write("\npython最佳保姆式") # write写入 \n换行

f.close()  #close关闭
3.3 总结
1追加写入文件使用open函数的"a"模式进行写入

2.追加写入的方法有(和w模式一致):
	wirte(),写入内容
	flush(),刷新内容到硬盘中
	
3.注意事项:
	a模式,文件不存在,会创建新文件
	a模式,文件存在,会在原有内容后面继续写入
	可以使用"\n"来写出换行符

4 异常处理

​ 参考视频:黑马保姆级视频

异常的特性

​ 异常是具有传递性的

​ 当函数func01中发生异常,并且没有捕获处理这个异常的时候,

​ 异常会传递到函数func02,当func02也没有捕获处理这个异常的时候

​ main函数会捕获这个异常, 这就是异常的传递性.

注意:
当所有函数都没有捕获异常的时候,程序就会报错

python 复制代码
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()

打印結果

python 复制代码
func2 开始执行
func1 开始执行
出现异常了,异常的信息是:division by zero

5 模块导入导出

参考视频:黑马高质量保姆级视频

模块在使用前需要先导入,导入的语法如下:

[from 模块名] import [模块 | 类 | 变量 | 函数 | *] [as 别名]   # from是针对模块中某个方法去使用

模块的导入方式:

python 复制代码
常用的组合形式如:
    import 模块名
    from   模块名  import  类、变量、方法等
    from   模块名  import  *
    import 模块名  as  别名
    from   模块名  import  功能名  as  别名
5.1 import基本语法:
python 复制代码
import 模块名
import 模块名1,模块名2

模块名.功能名()
5.2 import案例:导入time模块,需要time.sleep()调用
python 复制代码
#导入时间模块
import time

print("开始")
#让程序睡眠1秒(阻塞)
time.sleep(1)
print("结束")
5.3 from基本语法:

​ 针对模块中的某个方法去使用

python 复制代码
from 模块名 import 功能名
功能名()

注意:
from time import *  # 是将某块中所有方法都导入
5.4 from案例:导入time模块中的sleep方法,可以直接写sleep调用
python 复制代码
#导入time时间模块中的sleep方法
from time import sleep

print("开始")
#让程序睡眠1秒(阻塞)
sleep(1)
print("结束")
5.5 from案例:导入time模块中的*

案例:导入time模块中所有的方法,可以直接写sleep调用

python 复制代码
#导入时间模块中所有的方法
from time import *

print("开始")
#让程序睡眠1秒(阻塞)
sleep(1)
print("结束")

6 自定义模块

参考视频:黑马保姆级高质量视频

6.1 外部导入不让函数自运行
my_modulel.py文件
def test(a, b):
	print(a + b)

if __name__ == '__main__': # 加入这个函数,也可以单独测试运行定义的函数
	test(1,2)
6.2 [__all__]变量

不写__all__全部都可以用,写了all只能用列表里面的函数,all只是限定在*上

6.3 总结
 1.如何自定义模块并导入?
    在Python代码文件中正常写代码即可,通过import、from关键字和导
    入Python内置模块一样导入即可使用。

2._main_变量的功能是?
    if __main__=="_main_"表示,只有当程序是直接执行的才会进入
    if内部,如果是被导入的,则if无法进入
    
3.注意事项
	不同模块,同名的功能,如果都被导入,那么后导入的会覆盖先导入的

7 自定义python包

参考视频:黑马保姆级视频

基于Python模块,我们可以在编写代码的时候,导入许
多外部代码来丰富功能。
但是,如果Python的模块太多了,就可能造成一定的混
乱,那么如何管理呢?
通过Python包的功能来管理。
7.1 步骤如下
7.2 pycharm中基本步骤(创建包)

​ 选项目根目录 ---》右键 [new] --> [Python Packag] --->输入包名(如my_package) --> OK -->新建功能模块

​ 注意: 新建包后如(my_package),包内部会自动创建 __init__.py文件,这个文件控制着包的导入行为 如 [__all__ =['my_module1']]

​ 在包里可以新建文件*.py --》各自功能 *.py文件

7.3 导入自定义包
import my_package.my_modulel
import my_package.my_module2

my_package.my_modulel.info_print1()   #使用包里面函数


或者优化导入:
import my_package.my_module2 import info_print1

info_print1()   #使用包里面函数
7.4 总结
1.什么是Python的包?
  包就是一个文件夹,里面可以存放许多Python的模块(代码文件),通
  过包,在逻辑上将一批模块归为一类,方便使用。
    
2._init_.py文件的作用?
  创建包会默认自动创建的文件,通过这个文件来表示一个文件夹是
  Python的包,而非普通的文件夹。
	
3.all变量的作用?
	同模块中学习到的是一个作用,控制import*能够导入的内容

8 第三方包

参考视频:黑马保姆级视频

8.1 什么是第三方包

我们知道,包可以包含一堆的Python模块,而每个模块又内含许多的功能。

所以,我们可以认为 : 一个包,就是一堆同类型功能的集合体。

在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:

科学计算中常用的: numpy包

数据分析中常用的: pandas包

大数据计算中常用的: pyspark、apache-flink包

图形可视化常用的: matplotlib、pyecharts

人工智能常用的: tensorflow

8.2 安装第三方包

安装第三方包-pip

第三方包的安装非常简单,我们只需要使用Python内置的pip程序即可。

打开我们许久未见的:命令提示符程序,在里面输入:

pipinstall包名称

即可通过网络快速安装第三方包

命令提示符cmd进行安装:

C:\Users\javac>pip install numpy
8.3 pip的网络优化

由于pip是连接的国外的网站进行包的下载,所以有的时候会速度很慢。

我们可以通过如下命令,让其连接国内的网站进行包的安装:

pip install -i https://pyp.ituna.tsinghua.edu.cn/simple 包名称

命令提示符cmd
C:\Users\javac> pip install	 -i https://pypi.tuna.tsinghua.edu.cn/simple numpy

https://pypi.tuna.tsinghua.edu.cn/simple 是清华大学提供的一个网站,可供pip程序下载第三方包

测试验证安装是否成功

8.4 pycharm 安装第三方包
8.4.1 点击右下角的python -->选择inter setting
8.4.2 点击+
8.4.3 选择后选择install安装--》关闭窗口--》确定后台进行下载
8.4.4 后台进行下载状态

9 颜色组件

9.1 安装
python 复制代码
pip install colorama # 安装组件
9.2 导入到 Python 中,并打印带有颜色的文本:
python 复制代码
from colorama import init, Fore, Back, Style

# 初始化 colorama
init()

# 使用不同的颜色打印文本
print(Fore.RED + '红色的文本')
print(Back.GREEN + '绿色背景的文本')
print(Fore.YELLOW + Back.BLUE + '黄色文字和蓝色背景的文本')

# 重置颜色(切换回默认颜色)
print(Style.RESET_ALL + '这是默认颜色的文本')

10 读取密码爆破脚本

python 复制代码
import crypt
import colorama

# 定义密码
shaw_line = "root:$y$j9T$b8VajevNPKrgCkOfpJaZf.$87w.72igkRq6sPzbDOnaqTh4o3l4TkDWEagTPHq4K2C:19597:0:99999:7:::"

# 以:进行分割,组合密文组合,取下标1的值
crypt_text = shaw_line.split(":")[1]

print(crypt_text)
#密码中获取盐值
salt = crypt_text[0:crypt_text.rindex("$")]

file_path = "/home/kali/mytestcode/test.text"
with open( file=file_path, mode= "r") as f:
    for line in f:
        passwd = line.strip() 
        print(f"\r{colorama.Fore.RED}[-] Trying password: {passwd}", end= "")

        # passwd = "weiwei"
        # 明文和盐值组合密文
        new_crypt_text = crypt.crypt(passwd, salt)
        # 对比是否相等_crypt
        if new_crypt_text == crypt_text:
            print(f"{colorama.Fore.RED}[+] PASSWORD FOUND:{passwd}" )
    print(f"[-] pwssword not fo")

11 发送主机ping包(主机存活)

11.01安装scapy包
pip show scapy
11.02 查看安装包的版本
python 复制代码
import scapy
print(scapy.__version__)
11.03 ping代码
python 复制代码
from scapy.layers.inet import *

netmast = "10.9.75."
src="10.9.75.160"

for i in range(1,5):
    dst = f"{netmast}{i}"
    # print(dst)
    pkt = IP(src= src, dst= dst)/ICMP() # src目标地址, dst循环的地址
    res = sr1(pkt, timeout=1)
    if res and res.type == 0:
        print(f"{dst} is ALIVE!")

打印结果:

python 复制代码
Received 46 packets, got 0 answers, remaining 1 packets
10.9.75.4
Begin emission:
WARNING: Mac address to reach destination not found. Using broadcast.
Finished sending 1 packets.
....................................................................................................................................................

12 主机存活代码优化

12.1 屏蔽WARNING的信息和不显示点 verbose= False
python 复制代码
屏蔽WARNING的信息
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)  # 只有报错时才显示



不显示点
res = sr1(pkt, timeout=1, verbose= False)

最终优化后:

python 复制代码
from scapy.layers.inet import *
from colorama import init, Fore, Back, Style

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)

netmast = "10.9.75."  # 遍历扫描地址前缀
src="10.9.75.160"   # 自己的主机


for i in range(1,5):
    dst = f"{netmast}{i}"
    # print(dst)
    pkt = IP(src= src, dst= dst)/ICMP() # src目标地址, dst循环的地址
    res = sr1(pkt, timeout=1, verbose= False)
    if res and res.type == 0:
        print(Fore.RED + f"{dst} is ALIVE!")  # Fore.RED增加颜色
 

打印结果:

10.9.75.1 is ALIVE!
相关推荐
一颗松鼠7 分钟前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
有梦想的咸鱼_8 分钟前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
海阔天空_201314 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
天下皆白_唯我独黑21 分钟前
php 使用qrcode制作二维码图片
开发语言·php
零意@22 分钟前
ubuntu切换不同版本的python
windows·python·ubuntu
夜雨翦春韭25 分钟前
Java中的动态代理
java·开发语言·aop·动态代理
小远yyds27 分钟前
前端Web用户 token 持久化
开发语言·前端·javascript·vue.js
思忖小下33 分钟前
Python基础学习_01
python
何曾参静谧39 分钟前
「C/C++」C/C++ 之 变量作用域详解
c语言·开发语言·c++
q567315231 小时前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash