Tips
編碼 UTF-8 宣告
#!/usr/bin/python
# -*- coding: utf-8 -*-
Find all installed modules
help("modules");
目前環境的模組安裝路徑
import powerline
powerline.__path__
# Return ['/home/alang/.local/lib/python3.10/site-packages/powerline']
Virtual Environment
Conda
# Create a virtual env
conda create -n myproj python=3.11
# Activate the virtual env
conda activate myproj
# Deactivate the virtual env
conda deactivate
Python 3.4+ built-in venv
# Install venv
sudo apt install python3-venv
# Enable venv
mkdir myproject
cd myproject
python -m venv .venv
# Activate the venv
source .venv/bin/activate
# Delete the venv
deactivate
rm -rf .venv
# Change the App directory after activating venv
cd /path/to
mv old new
cd new/.venv/bin
old_path="/path/to/old/.venv"
new_path="/path/to/new/.venv"
find ./ -type f -exec sed -i "s|$old_path|$new_path|g" {} \;
cd /path/to/new
source .venv/bin/activate
With virtualenv and virtualenvwrapper
# Installing virtualenv and virtualenvwrapper
sudo pip install virtualenv virtualenvwrapper
# Update the profile ~/.bashrc
# Add the following lines
# Python virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
# Reload the profile
source ~/.bashrc
# Creating python virtual environment
# The py3cv3 is a self-defined name
mkvirtualenv py3cv3 -p python3
# Enter the specified virtual environment
workon py3cv3
# Exit the the specified virtual environment
deactivate
# List all of the environments.
lsvirtualenv
# Remove an environment
rmvirtualenv py3cv3
print( ... , end=" ")
輸出結尾以空白代替換行print("[" + str(left) + "|")
不同型態資料不可串接,必須用str()
轉換print()
只換行但沒有內容輸出
for left in range(7):
for right in range(left, 7):
print("[" + str(left) + "|" + str(right) + "]", end=" ")
print()
Print the List with join()
greetings = ["Hello", "world"]
print(" ".join(greetings)) # Prints "Hello world"
Timestamp
timestamp = datetime.datetime.now()
print("It is {}".format(timestamp.strftime("%A %d %B %Y %I:%M:%S%p")))
Math
total += 1
If-else
# Boolean, none
if motion is not None:
if not flag:
# Number
if delay > 0:
if delay == 0:
if total > frameCount:
# String
if "blue" in style:
if authors.startswith('['):
authors = authors.lstrip('[').rstrip(']')
# One-liner
def doi_url(d): return f'http://{d}' if d.startswith('doi.org') else f'http://doi.org/{d}'
# Multiple conditions
temperature = 25
if temperature > 30:
print('Hot')
elif temperature > 20 and temperature <= 30:
print('Warm')
else:
print('Cool')
# Reverse the True
temperature = 15
if not temperature > 20:
print('Cool')
#
temperature = 25
humidity = 55
rain = 0
if temperature > 30 or humidity < 70 and not rain > 0:
print('Dry conditions')
# Logical operators, AND, OR, NOT
if status >= 200 and status <= 226:
if status == 100 or status == 102:
if not(status >= 200 and status <= 226):
operator
operator |
use |
---|---|
> |
greater than |
< |
less than |
>= |
greater than or equal to |
<= |
less than or equal to |
== |
equal to |
!= |
not equal to |
Command Arguments
import argparse
# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--interval", required=False,
help="Seconds to Interval (Default:30)", default="30", type=int)
ap.add_argument("-o", "--output", required=False,
help="Path to Output Logs (Default:std-out)")
ap.add_argument("mac",
help="MAC address of LYWSD02 device", nargs="+")
args = vars(ap.parse_args())
# Usage
intv = args["interval"]
logfile = args["output"]
from argparse import ArgumentParser
def _get_args():
parser = ArgumentParser()
parser.add_argument("-c", "--checkpoint-path", type=str, default=DEFAULT_CKPT_PATH,
help="Checkpoint name or path, default to %(default)r")
parser.add_argument("--cpu-only", action="store_true", help="Run demo with CPU only")
parser.add_argument("--share", action="store_true", default=False,
help="Create a publicly shareable link for the interface.")
parser.add_argument("--inbrowser", action="store_true", default=False,
help="Automatically launch the interface in a new tab on the default browser.")
parser.add_argument("--server-port", type=int, default=8000,
help="Demo server port.")
parser.add_argument("--server-name", type=str, default="127.0.0.1",
help="Demo server name.")
args = parser.parse_args()
return args
def _test_args(args);
if args.cpu_only:
device_map = "cpu"
else:
device_map = "auto"
ckp_path = args.checkpoint_path
return device_map, ckp_path
def main():
args = _get_args()
device_map, ckp_path = _test_args(args)
if __name__ == '__main__':
main()
#
# Nagios2 HTTP proxy test
#
# usage: check_http_proxy --proxy=proxy:port --auth=user:pass --url=url --timeout=10 --warntime=5 --expect=content
import sys
import getopt
def get_cmdline_cfg():
try:
opts, args = getopt.getopt(
sys.argv[1:],
"p:a:t:w:e:u:",
["proxy=", "auth=", "timeout=", "warntime=", "expect=", "url="]
)
except getopt.GetoptError, err:
print("SCRIPT CALLING ERROR: {0}".format(str(err)))
### Build cfg dictionary
cfg = {}
for o, a in opts:
if o in ("-p", "--proxy"):
cfg["proxy"] = a
elif o in ("-a","--auth"):
cfg["auth"] = a
elif o in ("-t","--timeout"):
cfg["timeout"] = float(a)
elif o in ("-w","--warntime"):
cfg["warntime"] = float(a)
elif o in ("-e","--expect"):
cfg["expect"] = a
elif o in ("-u","--url"):
cfg["url"] = a
# These are required
for req_param in ("url", "proxy"):
if req_param not in cfg:
print("Missing parameter: {0}".format(req_param))
return cfg
# Usage
if __name__ == '__main__':
cfg = get_cmdline_cfg()
if "auth" in cfg:
proxy_url = "http://{auth}@{proxy}/".format(**cfg)
else:
proxy_url = "http://{proxy}/".format(**cfg)
Reading and Writing files
Open mode
- r : Read only (default)
- w : Write only
- a : Append
- r+ : Read-Write
- t : Text mode (default)
- b : Binary mode
- x : open for exclusive creation, failing if the file already exists
Read file: 一次讀取一行,內容輸出為 String 格式
with open("spider.txt") as file:
for line in file:
print(line.strip().upper())
Read file: 一次讀取整個檔案,內容輸出為 List 格式
file = open("spider.txt")
lines = file.readlines()
file.close()
lines.sort()
print(lines)
Write a file: 內容輸入為 String 格式,如果寫檔成功,回傳 string 的字元長度
with open("novel.txt", "w") as file:
file.write("It was a dark and stormy night")
# Return 30
# when successful, return the length of the string
Read and Write file
# Read a txt file
with open("update_log.txt", "r") as file:
updates = file.read()
print(updates)
# Write a txt file
# With both "w" and "a", you can use the .write() method
# "a" if you want to append to a file
line = "jrafael,192.168.243.140,4:56:27,True"
with open("access_log.txt", "w") as file:
file.write(line)
# Write a CSV or multi-lines file
login_file = """username,ip_address,time,date
tshah,192.168.92.147,15:26:08,2022-05-10
dtanaka,192.168.98.221,9:45:18,2022-05-09
tmitchel,192.168.110.131,14:13:41,2022-05-11
daquino,192.168.168.144,7:02:35,2022-05-08
eraab,192.168.170.243,1:45:14,2022-05-11
jlansky,192.168.238.42,1:07:11,2022-05-11
acook,192.168.52.90,9:56:48,2022-05-10
"""
with open("login.txt", "w") as file:
file.write(login_file)
Encoding: 如果沒有指定,就以作業系統設定為主
f = open('workfile', 'w', encoding="utf-8")