快速复制html
光标定位到某行或者选中不少行 crtl/command + dpython
注释json
光标定位到某行或者选中不少行 crtl/command + /api
删除(剪切)数据结构
光标定位到某行或者选中不少行 crtl/command + dapp
python模版文件设置ide
command + , -> Editor -> Code Style -> File and Code Templaates -> Python Script函数
解释器修改编码
command + , -> Project:Pycharm Project -> Project Interpreter -> Project Interpreter:url
安装python模块
ps: 另一种方法是经过pip来进行安装。
command + , -> Project:Pycharm Project -> Project Interpreter -> 点击”+“,-> 搜索框输入要安装的模块 -> 点击左下方的 -> Install Package
#!/usr/bin/env python #-*- coding:utf-8 -*- #Authour fei.wang #Date: print("hello")
备注:
1,2行为固定的写法(必须),3 4行是规范,标明做者和脚本新建时间。 第1行 表示python解释器。 第2行 表示脚本的编码格式。
定义一个字符串
>>> name = "wangfei" >>> print(name) wangfei >>> print(type(name)) <class 'str'>
字符串切片
>>> name[0] 'w' >>> name[1] 'a' >>> name[0:] 'wangfei' >>> name[0:4] 'wang'
格式化字符
>>> print("name: %s" %name) name: wangfei >>> print("name:{}".format(name)) name:wangfei >>> age = 18 >>> print("name:{} age:{}".format(name,age)) name:wangfei age:18
字符串内建函数
startswith
>>> cmd = "ifconfig -a" >>> cmd.startswith("if") True >>> if cmd.startswith("if"): ... print("ok") ... ok
endswitch
>>> cmd2 = "hellow boy" >>> if cmd2.endswith("boy"): ... print("ok") ... else: ... print("no") ... ok
replace
>>> cmd2.replace("boy","girl") 'hellow girl'
split 切割
>>> v = "a.b.c.d.e.f" >>> v.split(".") ['a', 'b', 'c', 'd', 'e', 'f']
join
>>> li = v.split(".") >>> "+".join(li) 'a+b+c+d+e+f'
特性 :有序 可重复 可迭代 可嵌套
>>> li = [1,2,3,4,4] >>> li[0] 1 >>> li.append("5") >>> li [1, 2, 3, 4, 4, '5'] >>> li.pop() '5' >>> li.pop() 4 >>> li.pop() 4 >>> li.pop() 3 >>> li = [1,2,3,4,4] >>> for iter in li: ... print(iter) ... 1 2 3 4 4
特性: 无序,key values ,key惟一,可嵌套
>>> name = {"k1":"v1","k2":"v2","k3":"v3","k4":[1,2,3,4,5,6,7]} >>> name["k1"] 'v1' >>> name["k4"] [1, 2, 3, 4, 5, 6, 7] >>> name["k4"][0] 1 >>> name["k4"][-1] 7 >>> name["k5"]="v5" >>> name {'k5': 'v5', 'k2': 'v2', 'k4': [1, 2, 3, 4, 5, 6, 7], 'k3': 'v3', 'k1': 'v1'} >>> del name["k5"] >>> name {'k2': 'v2', 'k4': [1, 2, 3, 4, 5, 6, 7], 'k3': 'v3', 'k1': 'v1'} >>> name["k5"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'k5' >>> for k in name: ... print("key:{},values:{}".format(k,name[k])) ... key:k2,values:v2 key:k4,values:[1, 2, 3, 4, 5, 6, 7] key:k3,values:v3 key:k1,values:v1
if
num = 3 if num > 2 : print("{} > 2".format(num)) else: print("{} < 2".format(num)) 例子: import os cmd = "ifconfig -a" if cmd.startswith("rm"): print("forbid command.") else: os.system(cmd)
for
for num in range(9): print(num) # break 停止循环 for num in range(9): if num > 8: break print(num) # continue 跳出本层循环 for num in range(9): if num == 8: continue print(num)
while
import time while True: time.sleep(2) print("aaa")
函数的定义和执行
def func(): print("hellow") func()
函数的返回值
def func(): print("hellow") return "hellow" # 默认返回是None re = func() print(re)
局部变量和全局变量
num = 10 # 全局变量 def func(): num = 1 # 局部变量 print("hellow") func()
往函数里去传参数
# 形式参数 def func(name,age): print("name {},age {}".format(name,age)) func("wf","18") # 默认参数 def func(name,age=18): print("name {},age {}".format(name,age)) func("wf","27") # 位置参数 def func(name,age=18): print("name {},age {}".format(name,age)) func(age = 18,name = "wf") # 传入多参数 def func(*args): print(args) for Iter in args: print(Iter) li = [1,2,3,4,5] func(*li) # 传入key values def func(**kwargs): print(kwargs["name"],kwargs["age"]) msg = {"name":"wf","age":18} func(**msg) # 万能参数 def func(*args,**kwargs): print(''' args:{} kwargs:{}'''.format(args,kwargs)) li = [1,2,3,4] msg = {"name":"wf","age":18} func(*li,**msg)
文件清理脚本
import os def remove_file(path,tag): for Iter in os.walk(path): for file in Iter[-1]: file_abspath = Iter[0] + "/" + file if file_abspath.endswith("txt"): print("remove file:{}".format(file_abspath)) #os.remove(file_abspath) if __name__ == "__main__": # path = input("path:> ") path = "/Users/feiwang/PycharmProjects/python-study2/work/test" # tag = input("tag") tag = "txt" remove_file(path,tag)
装饰器
def f0(func): def wrapper(*args,**kwargs): print("hello") func() print("bye") return wrapper @f0 def f1(): print("my name is wf.") f1()
导入模块
import 模块 from 模块 import 方法 from 文件夹路径.模块 import 方法 from 文件夹路径.模块 import 方法 as 别名
序列化 反序列化
import json dic = { "name":"wf", "age":"18", "sex":"man", "salary":20000, "interest":["read", "game", "music"],} re = json.dumps(dic) # 序列化;把字典变成字符串 print(type(re)) dic2 = json.loads(re) # 反序列化;把字符串变成字典 print(type(dic2))
例子:
使用requests 从api接口获取json格式的数据,并进行反序列化。
import requests import json para = {'token': 'HPcWR7l4NJNJ', 'name': 'adminset'} # 参数拼接 r = requests.get("http://115.28.147.154/cmdb/get/host/", params = para) data = r.text print(r.url) # 显示拼接的url d1 = json.loads(data) print(type(d1))
open直接打开
file = open("url_list.txt","r") # re = file.read # 读取文件全部行 # re = file.readline() # 一行一行的读取文件内容 re = file.readlines() # 读取全部的文件内容,返回的是一个列表 print(re) file.close()
with 上下文处理(推荐)
with open("url_list.txt","r") as file: # re = file.read # 读取文件全部行 # re = file.readline() # 一行一行的读取 re = file.readlines() # 读取文件的全部行,返回的是一个列表 print(re)
列子:
对一个日志文件内容进行处理,处理后的内容单独的放到一个文件里。
要求:每次打开时,应该接着上一次的内容位置进行处理,而不是从头再开始。
from time import ctime import os import time tag = 0 while True: with open("url_list.txt","rb+") as file ,open("url_list.log","ab+") as log_file: file.seek(tag) # 挪动文件指针,到指定位置 while True: line = file.readline() if line: new_line = str(ctime()) + " - " + str(line,encoding="utf-8") print(new_line) log_file.write(bytes(new_line,encoding="utf-8")) else: break tag = file.tell() # 获取文件指针位置 time.sleep(2) print("-"*50)