pythongroup
㈠ python基礎教程 10-11例子如何執行
2020年最新Python零基礎教程(高清視頻)網路網盤
鏈接:
若資源有問題歡迎追問~
㈡ Python分組
前言分組原理
核心:
1.不論分組鍵是數組、列表、字典、Series、函數,只要其與待分組變數的軸長度一致都可以傳入groupby進行分組。
2.默認axis=0按行分組,可指定axis=1對列分組。
對數據進行分組操作的過程可以概括為:split-apply-combine三步:
1.按照鍵值(key)或者分組變數將數據分組。
2.對於每組應用我們的函數,這一步非常靈活,可以是python自帶函數,可以是我們自己編寫的函數。
3.將函數計算後的結果聚合。
1 分組模式及其對象
1.1 分組的一般模式
三個要素:分組依據、數據來源、操作及其返回結果
df.groupby(分組依據)[數據來源].使用操作
1.2 分組依據的本質
1.3Groupby 對象
通過 ngroups 屬性,可以訪問分為了多少組:
通過 groups 屬性,可以返回從 組名映射到 組索引列表的字典:
當 size 作為 DataFrame 的屬性時,返回的是表長乘以表寬的大小,但在 groupby 對象上表示統計每個組的 元素個數:
通過 get_group 方法可以直接獲取所在組對應的行,此時必須知道組的具體名字:
1.4 分組的三大操作
分組的三大操作:聚合、變換和過濾
2.聚合函數
2.1內置聚合函數
包括如下函數: max/min/mean/median/count/all/any/idxmax/idxmin/mad/nunique/skew/quantile/sum/std/var/sem/size/prod
2.2agg 方法
【a】使用多個函數
當使用多個聚合函數時,需要用列表的形式把內置聚合函數的對應的字元串傳入,先前提到的所有字元串都是合法的。
【b】對特定的列使用特定的聚合函數
對於方法和列的特殊對應,可以通過構造字典傳入 agg 中實現,其中字典以列名為鍵,以聚合字元串或字元串列表為值。
【c】使用自定義函數
在 agg 中可以使用具體的自定義函數,需要注意傳入函數的參數是之前數據源中的列,逐列進行計算
【d】聚合結果重命名 如果想要對結果進行重命名,只需要將上述函數的位置改寫成元組,元組的第一個元素為新的名字,第二個位置為原來的函數,包括聚合字元串和自定義函數
3 變換和過濾
3.1 變換函數與 transform 方法
變 換 函 數 的 返 回 值 為 同 長 度 的 序 列, 最 常 用 的 內 置 變 換 函 數 是 累 計 函 數:cum- count/cumsum/cumprod/cummax/cummin ,它們的使用方式和聚合函數類似,只不過完成的是組內 累計操作。
3.2 組索引與過濾
過濾在分組中是對於組的過濾,而索引是對於行的過濾
組過濾作為行過濾的推廣,指的是如果對一個組的全體所在行進行統計的結果返回 True 則會被保留,False 則該組會被過濾,最後把所有未被過濾的組其對應的所在行拼接起來作為 DataFrame 返回。
在 groupby 對象中,定義了 filter 方法進行組的篩選,其中自定義函數的輸入參數為數據源構成的 DataFrame 本身,在之前例子中定義的 groupby 對象中,傳入的就是 df[['Height', 'Weight']] ,因此所有表方法和屬性 都可以在自定義函數中相應地使用,同時只需保證自定義函數的返回為布爾值即可。
4 跨列分組
4.1 apply 的引入
4.2 apply 的使用
在設計上,apply 的自定義函數傳入參數與 filter 完全一致,只不過後者只允許返回布爾值
【a】標量情況:結果得到的是 Series ,索引與 agg 的結果一致
【b】Series 情況:得到的是 DataFrame ,行索引與標量情況一致,列索引為 Series 的索引
【c】DataFrame 情況:得到的是 DataFrame ,行索引最內層在每個組原先 agg 的結果索引上,再加一層返 回的 DataFrame 行索引,同時分組結果 DataFrame 的列索引和返回的 DataFrame 列索引一致
㈢ Python 正則匹配為什麼group(1)返回為空,group(2)返回為none
你的正則從a字元串提取不到任何信息,自然列印就空白了。
㈣ python group函數有幾個返回值
一個,返回的是符合正則表達式的字元串。
group(0)返回整個字元串;
group(1)返回第一個匹配值;
group(2)返回第二個匹配值;
group(3)返回第三個匹配值。
依次類推。
㈤ python - Poetry介紹
一、簡介
Poetry 是一個Python 中的好用的包管理工具。在 Python 中,打包系統和依賴管理非常復雜:一個項目經常要同時創建多個文件,例如:
setup.py
requirements.txt
setup.cfg
MANIFEST.in
Pipfile
基於此, poetry 將所有的配置都放置在一個 toml 文件中,包括:依賴管理、構建、打包、發布等,可謂是簡單方便。
二、安裝
Poetry 要求 Python 版本為 2.7 或者 3.5+。Poetry 官方提供了一個腳本,可以快速方便地進行安裝。
osx / linux / bashonwindows 安裝:
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -
windows powershell 安裝:
(Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py -UseBasicParsing).Content | python -
Poetry 會被安裝在系統中的如下位置:
$HOME/.local/bin Unix系統
%APPDATA%PythonScripts Windows系統
然後把路徑添加到系統變數 PATH 中,即可使用 poetry 命令調用:
poetry --version
卸載:
python install-poetry.py --uninstall
POETRY_UNINSTALL=1 python install-poetry.py
如果你想要改變安裝的默認路徑,可以設置 POETRY_HOME :
POETRY_HOME=/etc/poetry python install-poetry.py
除了官方的安裝腳本,也可以使用 pipx 或者 pip 進行安裝:
pipx install poetry
pipx upgrade poetry
pipx uninstall poetry
pip install --user poetry
更新:
poetry self update
三、基礎使用
在已有項目中執行:
poetry init
該命令創建了一個pyproject.toml 文件。你可以手動修改 pyproject.toml 文件添加依賴,然後運行:
poetry install
也可以執行 add 命令安裝具體某個模塊並自動添加到 pyproject.toml:
$ poetry add xxxx
默認情況下,poetry會在 {cache-dir}/virtualenvs 下創建虛擬環境,你也可以手動修改該配置項,或者在 pyproject.toml 配置[virtualenvs.in-project] 在你的項目目錄中創建虛擬環境。
你可以使用 run 命令在虛擬環境中運行腳本:
poetry run python your_script.py
或者直接激活你的虛擬環境,新建一個 shell 運行:
poetry shell
只安裝dependencies :
poetry install --no-root
更新所有鎖定版本的依賴:
poetry update
四、命令選項
全局選項:
--verbose (-v|vv|vvv): "-v" 正常輸出, "-vv" 詳細輸出 "-vvv" debug
--help (-h) : 幫助信息
--quiet (-q) : 不輸出任何信息
--ansi: 強制 ANSI 輸出
--no-ansi: 禁止ANSI 輸出
--version (-V): 顯示版本
--no-interaction (-n): 禁止交互詢問
NEW:
poetry new my-package
創建項目模板,項目結構如下所示:
my-package
├── pyproject.toml
├── README.md
├── my_package
│ └── init .py
└── tests
└── init .py
init:創建pyproject.toml文件 。
install:讀取pyproject.toml並安裝依賴,它具有如下這些選項:
--without: 忽略依賴
--with: 安裝可選的依賴
--only: 只安裝指定的依賴
--default: 只安裝默認的依賴
--sync: 同步鎖定的版本至環境中
--no-root: 不安裝根依賴包
--dry-run: 輸出操作但不執行
--extras (-E): 安裝額外的包
update:升級包
poetry update
不指定任何包時,更新所有,也可以指定升級包:
poetry update requests toml
它具有如下選項:
--dry-run : 輸出操作但不執行
--no-dev : 不按照開發依賴
--lock : 只更新鎖定不安裝
add: 添加依賴並安裝
限制范圍:
poetry add penlum@^2.0.5
poetry add "penlum>=2.0.5"
它具有如下選項:
--group (-D): 分組
--editable (-e): 添加到編輯模式
--extras (-E): 添加額外的依賴
--optional: 添加至可選依賴
--python: 指定python版本
--platform: 指定操作系統
--source: 使用源名稱安裝
---allow-prereleases: 接受 prereleases 安裝
--dry-run: 輸出操作但不執行
--lock: 只更新鎖定不安裝
remove:移除依賴
它具有如下選項:
--group (-D): 分組
--dry-run : 輸出操作但不執行
show:列出所有的可安裝的包
如果你想看具體某個包的信息:
poetry show penlum
name : penlum
version : 1.4.2
description : Python datetimes made easy
dependencies:
--without: 忽略依賴
--with: 同時顯示
--only: 只顯示指定的依賴
--default: 只顯示默認的
--no-dev: 不顯示開發的依賴
--tree: 以樹狀形式顯示
--latest (-l): 展示最新的版本
--outdated (-o): 顯示最新版本,但僅適用於過時的軟體包
build:構建
publish:發布
config:配置項
使用方法:
poetry config [options] [setting-key] [setting-value1] ... [setting-valueN]
它具有如下選項:
--unset: 刪除配置項
--list: 展示現在的配置
run:在虛擬環境中執行命令
shell:激活虛擬環境
check:檢查pyproject.toml文件
search:搜索遠程包
lock:鎖定版本
version:顯示版本
export:導出鎖定的文件為其他的格式
poetry export -f requirements.txt --output requirements.txt
它具有如下選項:
--format (-f): 轉換的格式,暫時只支持requirements.txt
--output (-o): 輸出文件名字
--dev: 包括開發的依賴
--extras (-E): 額外的依賴
--without-hashes: 忽略哈希
--with-credentials: 包括合格證書
env:與虛擬環境進行交互
cache:緩存
顯示緩存列表:
poetry cache list
清除緩存:
poetry cache clear pypi --all
plugin:插件
安裝插件:
poetry plugin add poetry-plugin
顯示插件列表:
poetry plugin show
移除插件:
poetry plugin remove poetry-plugin
source: 倉庫源
添加源:
poetry source add pypi-test https://test.pypi.org/simple/
顯示倉庫源列表:
poetry source show
移除:
poetry source remove pypi-test
五、配置
你可以運行config命令進行配置,或者直接修改config.toml文件,這個文件通常位於:
macOS: ~/Library/Application Support/pypoetry
Windows: C:Users<username>AppDataRoamingpypoetry
Unix~/.config/pypoetry
可以使用--local命令對具體項目進行配置:
poetry config virtualenvs.create false --local
配置項:
cache-dir緩存目錄
installer.parallel並行安裝
virtualenvs.create如果不存在,則新建一個虛擬環境
virtualenvs.in-project在項目根目錄創建虛擬環境
virtualenvs.path虛擬環境路徑
virtualenvs.options.always-復制源文件還是創建鏈接到虛擬環境
virtualenvs.options.system-site-packages虛擬環境獲得系統包的許可權
repositories.<name>設置一個新的可選倉庫
六、依賴配置
依賴的配置有很多種寫法:
版本限制:
尖括弧:^1.2 代表 >=1.2.0 <2.0.0
波浪號:~1.2.3 代表 >=1.2.3 <1.3.0
星號:1.* 代表 >=1.0.0 <2.0.0
使用git倉庫:
[tool.poetry.dependencies]
requests = { git = " https://github.com/requests/requests.git " }
使用本地路徑:
[tool.poetry.dependencies]
my-package = { path = "../my-package/", develop = false }
my-package = { path = "../my-package/dist/my-package-0.1.0.tar.gz" }
使用URL:
[tool.poetry.dependencies]
my-package = { url = " https://example.com/my-package-0.1.0.tar.gz " }
python限制:
[tool.poetry.dependencies]
pathlib2 = { version = "^2.2", python = "~2.7" }
環境限制:
[tool.poetry.dependencies]
pathlib2 = { version = "^2.2", markers = "python_version ~= ƈ.7' or sys_platform == 'win32'" }
組合:
[tool.poetry.dependencies]
foo = [
{version = "<=1.9", python = "^2.7"},
{version = "^2.0", python = "^3.4"}
]
如果限制很多,寫成一行不方便閱讀,可以寫成多行:
[tool.poetry.group.dev.dependencies]
black = {version = "19.10b0", allow-prereleases = true, python = "^3.6", markers = "platform_python_implementation == 'CPython'"}
寫成多行後:
[tool.poetry.group.dev.dependencies.black]
version = "19.10b0"
allow-prereleases = true
python = "^3.6"
markers = "platform_python_implementation == 'CPython'"
分組功能:
[tool.poetry.group.test.dependencies]
pytest = "^6.0.0"
pytest-mock = "*"
例如以上,就建立了一個test的組合的依賴。
下面這兩種寫法是等價的:
[tool.poetry.dev-dependencies]
pytest = "^6.0.0"
pytest-mock = "*"
或者:
[tool.poetry.group.dev.dependencies]
pytest = "^6.0.0"
pytest-mock = "*"
以上兩種寫法都聲明了一個dev的組的依賴。
聲明組合是可選的,這在具體的環境中有的特定的用途時很有用:
[tool.poetry.group.docs]
optional = true
[tool.poetry.group.docs.dependencies]
mkdocs = "*"
添加依賴到組中:
poetry add pytest --group test
同步依賴,只使用poetry.lock中的依賴,移除其他不是必須的依賴:
poetry install --sync
七、環境管理
Poetry可以為項目使用獨立的虛擬環境,而不是使用系統安裝的。
切換環境:
poetry env use /full/path/to/python
poetry env use python3.7
poetry env use system
顯示當前激活的環境信息:
poetry env info
運行命令會輸出如下信息:
Virtual environment
Python: 3.7.1
Implementation: CPython
Path: /path/to/poetry/cache/virtualenvs/test-O3eWbxRl-py3.7
Valid: True
System
Platform: darwin
OS: posix
Python: /path/to/main/python
列出所有的虛擬環境列表:
poetry env list
刪除環境:
poetry env remove /full/path/to/python
poetry env remove python3.7
poetry env remove 3.7
poetry env remove test-O3eWbxRl-py3.7
㈥ Python group by用法算平均年齡
定義一個Class:包含姓名name、性別gender、年齡age,輸入:包含學生對象的List,輸出:按照年齡age進行排序好的List。
Python內置的sorted()方法背後使用的是Timsort演算法,當數據越接近OrderedData的時候,時間復雜度越接近O(N)在我們的這個問題中,年齡屬性是比較符合OrderedData的。
Python由荷蘭數學和計算機科學研究學會的吉多·范羅蘇姆於1990年代初設計,作為一門叫做ABC語言的替代品Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。
㈦ python中re庫的常見用法
. 匹配除換行符外的任意字元
\d 匹配數字
\D 匹配非數字
\w 匹配數字字母下劃線,支持中文
\W 小寫w的反集
[abc] 匹配abc中任意一個
[a-f] 匹配字母a到f中的任意一個
x|y 匹配x或者y
^ 匹配字元串的開頭
$ 匹配字元串的結尾
{3,5} 匹配次數,最少3個,最多5個
{3,} 至少匹配3次
* 匹配前一個字元,0次或多次
+ 匹配前一個字元,1次或多次
? 當前面不是數量表達式時,代表匹配0次或1次
舉個栗子:
findall()函數的作用是匹配所有符合條件字元串,並以列表形式返回
由於.是匹配除換行符外的所有字元,{3,5} 匹配次數,最少3個,最多5個,在默認的貪婪模式下會匹配最多的字元,所以在列表中,字母a開頭的字元串後面都跟了5個字元。
可以看到在非貪婪模式下,列表中的每一項都匹配最少的字元數。
從前往後,匹配到符合條件的最短的每一個字元串
邊界字元:
^ 限定開頭
$ 限定結尾
匹配分組:
() 提取出來的只有括弧里匹配到的部分
上文中已經用到這個方法了,返回匹配到的字元串列表,如果沒有匹配到的內容,則返回空列表。
flags參數是可以省略的,不省略時代表具有其他特殊的功能,如忽略大小寫,忽略換行符等,re.S代表匹配時忽略換行符
re.search()和re.findall()的參數是一樣的,只是返回結果不同,如果匹配到了,就返回該結果的正則表達式對象;如果沒有匹配到,則返回None
使用re.search()返回匹配到的第一個字元串的正則表達式對象,找到了就會停止匹配。因此這個函數比較適合在一個大文本中找第一個出現的字元串。
若想讓這個字元串展示出來,還需要藉助group()函數。
舉個栗子:
這個函數的作用是將正則表達式編譯為一個正則表達式對象,如果要多次使用這個正則表達式的話,可以先編譯,然後復用,使程序更高效一些,對這個對象繼續使用.match(string)就可以顯示匹配到的正則表達式對象,後續如果想要獲取具體內容的話,和上面是一眼國的,直接使用group(0)就可以啦。
如果不考慮復用的話,和re.mach(pattern, string)的效果是一樣的。
從運行結果也可以看出,re.match()和re.search()的區別,雖然二者都會返回匹配到的正則表達式對象,但是re.match()是從字元串的最開始位置開始匹配的,如果最開始的字元不匹配則會直接返回None;而re.search()則會一直往後找,直到找到第一個符合條件的字元串。
re.sub()函數用於替換字元串中的匹配項
舉個栗子:
將所有數字替換為了一個空格。
㈧ 用python計算表格數據,分組
不知道理解題意是否正確,見如下代碼:
group1={}
group2={}
foriteminraw_items_list:
ifitem['prov1']notingroup1.keys():
group1[item['prov1']]=list()
else:
group1[item['prov1']].append((item['count'],item['value']))
ifitem['prov2']notingroup2.keys():
group2[item['prov2']]=list()
else:
group2[item['prov2']].append((item['count'],item['value']))
#
forgingroup1.keys():
value_list=group1[g]
count=0.0
value=0.0
forvinvalue_list:count+=v[0]
forvinvalue_list:value+=v[0]/count*v[1]
print'Averageofgroup1-%sis:%f'(g,value/len(value_list))
#averageofgroup2
#...
㈨ python|re模塊group函數 'str' object has no attribute 'group'
import re
inputStr = "hello 123 world 456"
m = re.search(r"(?P<number>\d+)", inputStr)
if m:
g = m.group('number')
print(g)
正則表達式模塊re的其他基本用法,可自行學習。
㈩ python 運維常用腳本
Python 批量遍歷目錄文件,並修改訪問時間
import os
path = "D:/UASM64/include/"
dirs = os.listdir(path)
temp=[];
for file in dirs:
temp.append(os.path.join(path, file))
for x in temp:
os.utime(x, (1577808000, 1577808000))
Python 實現的自動化伺服器管理
import sys
import os
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
def ssh_cmd(user,passwd,port,userfile,cmd):
def ssh_put(user,passwd,source,target):
while True:
try:
shell=str(input("[Shell] # "))
if (shell == ""):
continue
elif (shell == "exit"):
exit()
elif (shell == "put"):
ssh_put("root","123123","./a.py","/root/a.py")
elif (shell =="cron"):
temp=input("輸入一個計劃任務: ")
temp1="(crontab -l; echo "+ temp + ") |crontab"
ssh_cmd("root","123123","22","./user_ip.conf",temp1)
elif (shell == "uncron"):
temp=input("輸入要刪除的計劃任務: ")
temp1="crontab -l | grep -v " "+ temp + "|crontab"
ssh_cmd("root","123123","22","./user_ip.conf",temp1)
else:
ssh_cmd("lyshark","123123","22","./user_ip.conf",shell)
遍歷目錄和文件
import os
def list_all_files(rootdir):
import os
_files = []
list = os.listdir(rootdir) #列出文件夾下所有的目錄與文件
for i in range(0,len(list)):
path = os.path.join(rootdir,list[i])
if os.path.isdir(path):
_files.extend(list_all_files(path))
if os.path.isfile(path):
_files.append(path)
return _files
a=list_all_files("C:/Users/LyShark/Desktop/a")
print(a)
python檢測指定埠狀態
import socket
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.settimeout(1)
for ip in range(0,254):
try:
sk.connect(("192.168.1."+str(ip),443))
print("192.168.1.%d server open
"%ip)
except Exception:
print("192.168.1.%d server not open"%ip)
sk.close()
python實現批量執行CMD命令
import sys
import os
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print("------------------------------>
")
print("使用說明,在當前目錄創建ip.txt寫入ip地址")
print("------------------------------>
")
user=input("輸入用戶名:")
passwd=input("輸入密碼:")
port=input("輸入埠:")
cmd=input("輸入執行的命令:")
file = open("./ip.txt", "r")
line = file.readlines()
for i in range(len(line)):
print("對IP: %s 執行"%line[i].strip('
'))
python3-實現釘釘報警
import requests
import sys
import json
dingding_url = ' https://oapi.dingtalk.com/robot/send?access_token='
data = {"msgtype": "markdown","markdown": {"title": "監控","text": "apche異常"}}
headers = {'Content-Type':'application/json;charset=UTF-8'}
send_data = json.mps(data).encode('utf-8')
requests.post(url=dingding_url,data=send_data,headers=headers)
import psutil
import requests
import time
import os
import json
monitor_name = set(['httpd','cobblerd']) # 用戶指定監控的服務進程名稱
proc_dict = {}
proc_name = set() # 系統檢測的進程名稱
monitor_map = {
'httpd': 'systemctl restart httpd',
'cobblerd': 'systemctl restart cobblerd' # 系統在進程down掉後,自動重啟
}
dingding_url = ' https://oapi.dingtalk.com/robot/send?access_token='
while True:
for proc in psutil.process_iter(attrs=['pid','name']):
proc_dict[proc.info['pid']] = proc.info['name']
proc_name.add(proc.info['name'])
判斷指定埠是否開放
import socket
port_number = [135,443,80]
for index in port_number:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((飗.0.0.1', index))
if result == 0:
print("Port %d is open" % index)
else:
print("Port %d is not open" % index)
sock.close()
判斷指定埠並且實現釘釘輪詢報警
import requests
import sys
import json
import socket
import time
def dingding(title,text):
dingding_url = ' https://oapi.dingtalk.com/robot/send?access_token='
data = {"msgtype": "markdown","markdown": {"title": title,"text": text}}
headers = {'Content-Type':'application/json;charset=UTF-8'}
send_data = json.mps(data).encode('utf-8')
requests.post(url=dingding_url,data=send_data,headers=headers)
def net_scan():
port_number = [80,135,443]
for index in port_number:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((飗.0.0.1', index))
if result == 0:
print("Port %d is open" % index)
else:
return index
sock.close()
while True:
dingding("Warning",net_scan())
time.sleep(60)
python-實現SSH批量CMD執行命令
import sys
import os
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
def ssh_cmd(user,passwd,port,userfile,cmd):
file = open(userfile, "r")
line = file.readlines()
for i in range(len(line)):
print("對IP: %s 執行"%line[i].strip('
'))
ssh.connect(hostname=line[i].strip('
'),port=port,username=user,password=passwd)
cmd=cmd
stdin, stdout, stderr = ssh.exec_command(cmd)
result = stdout.read()
ssh_cmd("lyshark","123","22","./ip.txt","free -h |grep 'Mem:' |awk '{print $3}'")
用python寫一個列舉當前目錄以及所有子目錄下的文件,並列印出絕對路徑
import sys
import os
for root,dirs,files in os.walk("C://"):
for name in files:
print(os.path.join(root,name))
os.walk()
按照這樣的日期格式(xxxx-xx-xx)每日生成一個文件,例如今天生成的文件為2013-09-23.log, 並且把磁碟的使用情況寫到到這個文件中。
import os
import sys
import time
new_time = time.strftime("%Y-%m-%d")
disk_status = os.popen("df -h").readlines()
str1 = ''.join(disk_status)
f = open(new_time+'.log','w')
f.write("%s"%str1)
f.flush()
f.close()
統計出每個IP的訪問量有多少?(從日誌文件中查找)
import sys
list = []
f = open("/var/log/httpd/access_log","r")
str1 = f.readlines()
f.close()
for i in str1:
ip=i.split()[0]
list.append(ip)
list_num=set(list)
for j in list_num:
num=list.count(j)
print("%s -----> %s" %(num,j))
寫個程序,接受用戶輸入數字,並進行校驗,非數字給出錯誤提示,然後重新等待用戶輸入。
import tab
import sys
while True:
try:
num=int(input("輸入數字:").strip())
for x in range(2,num+1):
for y in range(2,x):
if x % y == 0:
break
else:
print(x)
except ValueError:
print("您輸入的不是數字")
except KeyboardInterrupt:
sys.exit("
")
ps 可以查看進程的內存佔用大小,寫一個腳本計算一下所有進程所佔用內存大小的和。
import sys
import os
list=[]
sum=0
str1=os.popen("ps aux","r").readlines()
for i in str1:
str2=i.split()
new_rss=str2[5]
list.append(new_rss)
for i in list[1:-1]:
num=int(i)
sum=sum+num
print("%s ---> %s"%(list[0],sum))
關於Python 命令行參數argv
import sys
if len(sys.argv) < 2:
print ("沒有輸入任何參數")
sys.exit()
if sys.argv[1].startswith("-"):
option = sys.argv[1][1:]
利用random生成6位數字加字母隨機驗證碼
import sys
import random
rand=[]
for x in range(6):
y=random.randrange(0,5)
if y == 2 or y == 4:
num=random.randrange(0,9)
rand.append(str(num))
else:
temp=random.randrange(65,91)
c=chr(temp)
rand.append(c)
result="".join(rand)
print(result)
自動化-使用pexpect非交互登陸系統
import pexpect
import sys
ssh = pexpect.spawn('ssh [email protected]')
fout = file('sshlog.txt', 'w')
ssh.logfile = fout
ssh.expect("[email protected]'s password:")
ssh.sendline("密碼")
ssh.expect('#')
ssh.sendline('ls /home')
ssh.expect('#')
Python-取系統時間
import sys
import time
time_str = time.strftime("日期:%Y-%m-%d",time.localtime())
print(time_str)
time_str= time.strftime("時間:%H:%M",time.localtime())
print(time_str)
psutil-獲取內存使用情況
import sys
import os
import psutil
memory_convent = 1024 * 1024
mem =psutil.virtual_memory()
print("內存容量為:"+str(mem.total/(memory_convent))+"MB
")
print("已使用內存:"+str(mem.used/(memory_convent))+"MB
")
print("可用內存:"+str(mem.total/(memory_convent)-mem.used/(1024*1024))+"MB
")
print("buffer容量:"+str(mem.buffers/( memory_convent ))+"MB
")
print("cache容量:"+str(mem.cached/(memory_convent))+"MB
")
Python-通過SNMP協議監控CPU
注意:被監控的機器上需要支持snmp協議 yum install -y net-snmp*
import os
def getAllitems(host, oid):
sn1 = os.popen('snmpwalk -v 2c -c public ' + host + ' ' + oid + '|grep Raw|grep Cpu|grep -v Kernel').read().split('
')[:-1]
return sn1
def getDate(host):
items = getAllitems(host, '.1.3.6.1.4.1.2021.11')
if name == ' main ':
Python-通過SNMP協議監控系統負載
注意:被監控的機器上需要支持snmp協議 yum install -y net-snmp*
import os
import sys
def getAllitems(host, oid):
sn1 = os.popen('snmpwalk -v 2c -c public ' + host + ' ' + oid).read().split('
')
return sn1
def getload(host,loid):
load_oids = Ƈ.3.6.1.4.1.2021.10.1.3.' + str(loid)
return getAllitems(host,load_oids)[0].split(':')[3]
if name == ' main ':
Python-通過SNMP協議監控內存
注意:被監控的機器上需要支持snmp協議 yum install -y net-snmp*
import os
def getAllitems(host, oid):
def getSwapTotal(host):
def getSwapUsed(host):
def getMemTotal(host):
def getMemUsed(host):
if name == ' main ':
Python-通過SNMP協議監控磁碟
注意:被監控的機器上需要支持snmp協議 yum install -y net-snmp*
import re
import os
def getAllitems(host,oid):
def getDate(source,newitem):
def getRealDate(item1,item2,listname):
def caculateDiskUsedRate(host):
if name == ' main ':
Python-通過SNMP協議監控網卡流量
注意:被監控的機器上需要支持snmp協議 yum install -y net-snmp*
import re
import os
def getAllitems(host,oid):
sn1 = os.popen('snmpwalk -v 2c -c public ' + host + ' ' + oid).read().split('
')[:-1]
return sn1
def getDevices(host):
device_mib = getAllitems(host,'RFC1213-MIB::ifDescr')
device_list = []
def getDate(host,oid):
date_mib = getAllitems(host,oid)[1:]
date = []
if name == ' main ':
Python-實現多級菜單
import os
import sys
ps="[None]->"
ip=["192.168.1.1","192.168.1.2","192.168.1.3"]
flage=1
while True:
ps="[None]->"
temp=input(ps)
if (temp=="test"):
print("test page !!!!")
elif(temp=="user"):
while (flage == 1):
ps="[User]->"
temp1=input(ps)
if(temp1 =="exit"):
flage=0
break
elif(temp1=="show"):
for i in range(len(ip)):
print(i)
Python實現一個沒用的東西
import sys
ps="[root@localhost]# "
ip=["192.168.1.1","192.168.1.2","192.168.1.3"]
while True:
temp=input(ps)
temp1=temp.split()
檢查各個進程讀寫的磁碟IO
import sys
import os
import time
import signal
import re
class DiskIO:
def init (self, pname=None, pid=None, reads=0, writes=0):
self.pname = pname
self.pid = pid
self.reads = 0
self.writes = 0
def main():
argc = len(sys.argv)
if argc != 1:
print ("usage: please run this script like [./lyshark.py]")
sys.exit(0)
if os.getuid() != 0:
print ("Error: This script must be run as root")
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
os.system('echo 1 > /proc/sys/vm/block_mp')
print ("TASK PID READ WRITE")
while True:
os.system('dmesg -c > /tmp/diskio.log')
l = []
f = open('/tmp/diskio.log', 'r')
line = f.readline()
while line:
m = re.match(
'^(S+)(d+)(d+): (READ|WRITE) block (d+) on (S+)', line)
if m != None:
if not l:
l.append(DiskIO(m.group(1), m.group(2)))
line = f.readline()
continue
found = False
for item in l:
if item.pid == m.group(2):
found = True
if m.group(3) == "READ":
item.reads = item.reads + 1
elif m.group(3) == "WRITE":
item.writes = item.writes + 1
if not found:
l.append(DiskIO(m.group(1), m.group(2)))
line = f.readline()
time.sleep(1)
for item in l:
print ("%-10s %10s %10d %10d" %
(item.pname, item.pid, item.reads, item.writes))
def signal_handler(signal, frame):
os.system('echo 0 > /proc/sys/vm/block_mp')
sys.exit(0)
if name ==" main ":
main()
利用Pexpect實現自動非交互登陸linux
import pexpect
import sys
ssh = pexpect.spawn('ssh [email protected]')
fout = file('sshlog.log', 'w')
ssh.logfile = fout
ssh.expect("[email protected]'s password:")
ssh.sendline("密碼")
ssh.expect('#')
ssh.sendline('ls /home')
ssh.expect('#')
利用psutil模塊獲取系統的各種統計信息
import sys
import psutil
import time
import os
time_str = time.strftime( "%Y-%m-%d", time.localtime( ) )
file_name = "./" + time_str + ".log"
if os.path.exists ( file_name ) == False :
os.mknod( file_name )
handle = open ( file_name , "w" )
else :
handle = open ( file_name , "a" )
if len( sys.argv ) == 1 :
print_type = 1
else :
print_type = 2
def isset ( list_arr , name ) :
if name in list_arr :
return True
else :
return False
print_str = "";
if ( print_type == 1 ) or isset( sys.argv,"mem" ) :
memory_convent = 1024 * 1024
mem = psutil.virtual_memory()
print_str += " 內存狀態如下:
"
print_str = print_str + " 系統的內存容量為: "+str( mem.total/( memory_convent ) ) + " MB
"
print_str = print_str + " 系統的內存以使用容量為: "+str( mem.used/( memory_convent ) ) + " MB
"
print_str = print_str + " 系統可用的內存容量為: "+str( mem.total/( memory_convent ) - mem.used/( 1024*1024 )) + "MB
"
print_str = print_str + " 內存的buffer容量為: "+str( mem.buffers/( memory_convent ) ) + " MB
"
print_str = print_str + " 內存的cache容量為:" +str( mem.cached/( memory_convent ) ) + " MB
"
if ( print_type == 1 ) or isset( sys.argv,"cpu" ) :
print_str += " CPU狀態如下:
"
cpu_status = psutil.cpu_times()
print_str = print_str + " user = " + str( cpu_status.user ) + "
"
print_str = print_str + " nice = " + str( cpu_status.nice ) + "
"
print_str = print_str + " system = " + str( cpu_status.system ) + "
"
print_str = print_str + " idle = " + str ( cpu_status.idle ) + "
"
print_str = print_str + " iowait = " + str ( cpu_status.iowait ) + "
"
print_str = print_str + " irq = " + str( cpu_status.irq ) + "
"
print_str = print_str + " softirq = " + str ( cpu_status.softirq ) + "
"
print_str = print_str + " steal = " + str ( cpu_status.steal ) + "
"
print_str = print_str + " guest = " + str ( cpu_status.guest ) + "
"
if ( print_type == 1 ) or isset ( sys.argv,"disk" ) :
print_str += " 硬碟信息如下:
"
disk_status = psutil.disk_partitions()
for item in disk_status :
print_str = print_str + " "+ str( item ) + "
"
if ( print_type == 1 ) or isset ( sys.argv,"user" ) :
print_str += " 登錄用戶信息如下:
"
user_status = psutil.users()
for item in user_status :
print_str = print_str + " "+ str( item ) + "
"
print_str += "---------------------------------------------------------------
"
print ( print_str )
handle.write( print_str )
handle.close()
import psutil
mem = psutil.virtual_memory()
print mem.total,mem.used,mem
print psutil.swap_memory() # 輸出獲取SWAP分區信息
cpu = psutil.cpu_stats()
printcpu.interrupts,cpu.ctx_switches
psutil.cpu_times(percpu=True) # 輸出每個核心的詳細CPU信息
psutil.cpu_times().user # 獲取CPU的單項數據 [用戶態CPU的數據]
psutil.cpu_count() # 獲取CPU邏輯核心數,默認logical=True
psutil.cpu_count(logical=False) # 獲取CPU物理核心數
psutil.disk_partitions() # 列出全部的分區信息
psutil.disk_usage('/') # 顯示出指定的掛載點情況【位元組為單位】
psutil.disk_io_counters() # 磁碟總的IO個數
psutil.disk_io_counters(perdisk=True) # 獲取單個分區IO個數
psutil.net_io_counter() 獲取網路總的IO,默認參數pernic=False
psutil.net_io_counter(pernic=Ture)獲取網路各個網卡的IO
psutil.pids() # 列出所有進程的pid號
p = psutil.Process(2047)
p.name() 列出進程名稱
p.exe() 列出進程bin路徑
p.cwd() 列出進程工作目錄的絕對路徑
p.status()進程當前狀態[sleep等狀態]
p.create_time() 進程創建的時間 [時間戳格式]
p.uids()
p.gids()
p.cputimes() 【進程的CPU時間,包括用戶態、內核態】
p.cpu_affinity() # 顯示CPU親緣關系
p.memory_percent() 進程內存利用率
p.meminfo() 進程的RSS、VMS信息
p.io_counters() 進程IO信息,包括讀寫IO數及位元組數
p.connections() 返回打開進程socket的nametples列表
p.num_threads() 進程打開的線程數
import psutil
from subprocess import PIPE
p =psutil.Popen(["/usr/bin/python" ,"-c","print 'helloworld'"],stdout=PIPE)
p.name()
p.username()
p.communicate()
p.cpu_times()
psutil.users() # 顯示當前登錄的用戶,和Linux的who命令差不多
psutil.boot_time() 結果是個UNIX時間戳,下面我們來轉換它為標准時間格式,如下:
datetime.datetime.fromtimestamp(psutil.boot_time()) # 得出的結果不是str格式,繼續進行轉換 datetime.datetime.fromtimestamp(psutil.boot_time()).strftime('%Y-%m-%d%H:%M:%S')
Python生成一個隨機密碼
import random, string
def GenPassword(length):
if name == ' main ':
print (GenPassword(6))