Python脚本编程的知识点

for循环

  1. 对列表进行迭代
>>> for i in [1,2,3]:
···		print (i)
···
1
2
3
  1. 通过range()函数生成连续数列
>>> for i in range(1,5):
···		print(i)
···
1
2
3
4
  1. range(初始值,终止值,步长),range得到的是一个左闭右开区间。
>>> range(1,10)
[1,2,3,4,5,6,7,8,9]

>>>range(1,9,2)
[1,3,5,7]

文件操作

  1. 文件操作的基本流程
  • 调用open()函数打开文件,并创建一个File对象
  • 调用File对象的read()或write()等方法,对文件内容进行读写等操作。
  • 调用File对象的close()方法,关闭并保存文件内容。
  1. open()函数
    通过open()函数以指定模式打开文件并创建文件对象:
文件对象=open('文件路径', '模式')
  • 文件打开模式主要包括:
    1、r只读模式(默认)
    2、w只写模式(如果文件已经存在,先清空原有内容,文件不存在则创建文件)
    3、a追加模式(不覆盖文件中原有的内容)
  • 如果传递给open()的文件名不存在。写模式和添加模式都会创建一个新的空文件。
  1. 写入文件
  • 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()
  1. 读取文件
  • 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'
  • 读取文件
  1. 通过for循环对列表进行迭代,这是最常用的读取方法。
>>> f=open("/tmp/ip.txt", "r")
>>> for i in f.readlines():
		print (i)
  1. 通过字符串strip()方法将文件中每行末尾的\n去除
>>> f=open("/tmp/ip.txt", "r")
>>> for i in f.readlines():
		print (i.strip("\n"))

导入模块(库)

模块的概念

  1. 模块也叫库,每个模块中都内置了大量的功能函数、类和变量。它就像是积木,可以根据需要进行调用组合。
  2. 模块就是程序,每个模块就是一个后缀为.py的Python程序。
  3. Python的模块分为标准模块和第三方模块,标准模块就是python内置的,第三方模块则需要安装之后才能使用。
  4. 可以通过help命令了解一个模块的基本帮助信息,如:help('sys')

模块导入

  1. 无论标准模块还是第三方模块都需要导入。
  2. 导入方法:
  • 直接调用模块: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()是一个方法,作用是退出当前程序。
  1. sys.exit()退出当前程序,并返回SystemExit异常。
  2. sys.exit(0),正常退出。
  3. 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的方式调用参数值。
posted @ 2020-06-29 20:45  m0re  阅读(74)  评论(0编辑  收藏  举报