python知識簡單總結 - 語言基礎 (一)
基礎知識
pycharm快捷鍵
-
快速復制
光標定位到某行或者選中很多行 crtl/command + d
-
註釋
光標定位到某行或者選中很多行 crtl/command + /
-
刪除(剪切)
光標定位到某行或者選中很多行 crtl/command + d
pycharm 簡單設置
-
python模版文件設置
command + , -> Editor -> Code Style -> File and Code Templaates -> Python Script
-
解釋器修改
command + , -> Project:Pycharm Project -> Project Interpreter -> Project Interpreter:
-
安裝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‘
list
特性 :有序 可重復 可叠代 可嵌套
>>> 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
dict
特性: 無序,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 別名
json
序列化 反序列化
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)
python知識簡單總結 - 語言基礎 (一)