Python脚本编程的知识点
for循环
- 对列表进行迭代
>>> for i in [1,2,3]:
··· print (i)
···
1
2
3
- 通过range()函数生成连续数列
>>> for i in range(1,5):
··· print(i)
···
1
2
3
4
- range(初始值,终止值,步长),range得到的是一个左闭右开区间。
>>> range(1,10)
[1,2,3,4,5,6,7,8,9]
>>>range(1,9,2)
[1,3,5,7]
文件操作
- 文件操作的基本流程
- 调用open()函数打开文件,并创建一个File对象
- 调用File对象的read()或write()等方法,对文件内容进行读写等操作。
- 调用File对象的close()方法,关闭并保存文件内容。
- open()函数
通过open()函数以指定模式打开文件并创建文件对象:
文件对象=open('文件路径', '模式')
- 文件打开模式主要包括:
1、r只读模式(默认)
2、w只写模式(如果文件已经存在,先清空原有内容,文件不存在则创建文件)
3、a追加模式(不覆盖文件中原有的内容) - 如果传递给open()的文件名不存在。写模式和添加模式都会创建一个新的空文件。
- 写入文件
- write()方法不会在字符串的末尾自动添加换行字符
- 向文件中写入内容:
>>> f=open("/tmp/ip.txt","w")
>>> f.write("192.168.80.1\n")
>>> f.write("192.168.80.2\n")
>>> f.write("192.168.80.3\n")
>>> f.close()
- 向文件中追加内容:
>>> f=open("/tmp/ip.txt","o")
>>> f.write("192.168.80.10\n")
>>> f.write("192.168.80.20\n")
>>> f.close()
- 读取文件
- Python文件对象提供了三种“读”方法:
1、read()
read()方法可以一次性读取文件的所有内容
>>> f=open("/tmp/ip.txt", "r")
>>> f.read()
'192.168.80.1\n192.168.80.2\n192.168.80.3\n'
>>> f.close()
read()方法也可以指定读取前几个字节的数据:
>>> f=open("/tmp/ip.txt","r")
>>> f.read(12)
'192.168.80.1'
>>> f.close()
2、readline()
readline()方法可以从文件中读取一行并作为结果返回:
>>> f-open("/tmp/ip.txt","r")
>>> f.readline()
'192.168.80.1\n'
>>> f.readline()
'192.168.80.2\n'
>>> f.close()
3、readlines()
readlines()方法返回一个列表,文件的每一行作为列表的一个元素:
>>> f=open("/tmp/ip.txt","r")
>>> f.readlines()
['192.168.80.1\n', '192.168.80.2\n', '192.168.80.3\n']
>>> f.seek(0)
>>> f.readlines()[0]#数组限定读取的信息
'192.168.80.1\n'
f.close()
4、seek()方法可以将指针返回到指定位置。
>>> f.seek(0)#返回到第一行
'192.168.80.1\n'
- 读取文件
- 通过for循环对列表进行迭代,这是最常用的读取方法。
>>> f=open("/tmp/ip.txt", "r")
>>> for i in f.readlines():
print (i)
- 通过字符串strip()方法将文件中每行末尾的\n去除
>>> f=open("/tmp/ip.txt", "r")
>>> for i in f.readlines():
print (i.strip("\n"))
导入模块(库)
模块的概念
- 模块也叫库,每个模块中都内置了大量的功能函数、类和变量。它就像是积木,可以根据需要进行调用组合。
- 模块就是程序,每个模块就是一个后缀为.py的Python程序。
- Python的模块分为标准模块和第三方模块,标准模块就是python内置的,第三方模块则需要安装之后才能使用。
- 可以通过help命令了解一个模块的基本帮助信息,如:
help('sys')
模块导入
- 无论标准模块还是第三方模块都需要导入。
- 导入方法:
- 直接调用模块:
import 模块名
- 从模块中调用某个函数:
from 模块名 import 函数名
import os
,应采用“模块名.方法名
”的形式使用模块中的方法。如:os.system()
from os import *
,可以直接使用system()方法,无需加上模块名作为前缀。
sys模块
sys是一个标准模块,与Python解释器密切相关。
- (1)sys.argv
sys.argv是一个变量,专门用来向Python解释器传递参数,类似于Shell脚本编程中的位置变量。
#!/usr/bin/env python
#coding=utf-8
import sys
print("脚本文件是:",sys.argv[0])
print("参数的数量是:",len(sys.argv))
print("所有的参数:",str(sys.argv))
print("第一个参数是:",sys.argv[1])
print("第二个参数是:",sys.argv[2])
print("第三个参数是:",sys.argv[3])
- (2)sys.exit()
sys.exit()是一个方法,作用是退出当前程序。
- sys.exit()退出当前程序,并返回SystemExit异常。
- sys.exit(0),正常退出。
- sys.exit(“程序退出”),显示一段提示信息。
#!/usr/bin/env python
#coding=utf-8
import sys
if len(sys.argv) != 2:
print("正确使用方法:"+ sys.argv[0] + "IP列表文件")
print("例如:./m0re.py /root/ip.txt")
sys.exit()
OS模块
os模块提供了访问操作系统服务的功能。
它最常用的是os.system()
方法,可以在Python中使用操作系统命令。
os.system("ls /root")
banner.py flag.sh pass.txt
ip.txt shadow
0
还有几个
- os.path.isfile()方法,判断指定的对象是否为文件,返回True或False。
>>> os.path.isfile("/root/pass.txt")
True
>>> os.path.isfile("/root/password.txt")
False
- os.path.isdir()方法,判断指定对象是否为目录。
- os.path.exists()方法,判断指定的对象是否存在。
>>> os.path.exists("/root/pass.txt")
True
>>> os.path.exists("/root/")
True
多线程
通过threading模块中的Thread()类可以创建和管理线程对象。
使用时,使用多线程调用一个函数,然后启动,就可以明显提高速度。
t=Thread(target=checkVulns,args=(ip,port))
t.start()
用时再查
optparse模块
利用该模块可以设置选项,通过选项向脚本传递所需的参数。
from optparse import OptionParser
parser=OptionParser()
parser.add_option("-f","--file",type="string",dest="filename")
parser.add_option("-i","--ip",type="string",dest="address")
(option,args)=parser.parse_args()
print options.filename
print options.address
代码解释
·第一行,导入optparse模块中的类OptionParser。
·第二行,将类实例化成对象。
·第三行,利用add_option()方法添加选项。-f和--file分别表示长短选项名,长选项可以省略。type指定了参数类型,默认为string,dest指定将参数赋值给哪个变量。
·第四行,利用add_option()方法添加选项-i和-ip。
·第五行,利用parse_args()方法来获取定义的选项和参数,可以视作一种固定用法。
·parse_args()方法返回两个值,其中options对象保存了所传递进来的参数值。
·第六、七行,通过options.filename和options.address的方式调用参数值。