Python 是一种高级编程语言,以其简洁清晰的语法和强大的功能被广泛应用于各种领域,包括自动化脚本编写、数据分析、机器学习、Web开发等。以下是一些关于使用 Python 编写脚本工具的基本介绍、常用库以及一些实用技巧总结。
这里写目录标题
- 基础知识
- 安装 Python
- 第一个 Python 脚本
- 常用库
- 实用技巧
基础知识
安装 Python
首先需要安装 Python 环境。可以从 Python官方网站 下载适合你操作系统的最新版本,并按照提示进行安装。
第一个 Python 脚本
创建一个简单的 Python 脚本文件(如 hello.py
),并在其中输入以下内容:
print("Hello, World!")
然后在命令行中运行该脚本:
python hello.py
常用库
Python 拥有丰富的标准库和第三方库,可以帮助你快速实现各种功能。以下是几个常用的库及其应用场景:
-
os 和 sys
- 用于与操作系统交互。
import os import sys# 获取当前工作目录 print(os.getcwd())# 列出指定目录下的所有文件 for file in os.listdir('/path/to/directory'):print(file)# 获取命令行参数 print(sys.argv)
-
shutil
- 提供了高级文件操作功能,如复制、移动和删除文件或目录。
import shutil# 复制文件 shutil.copy('source_file.txt', 'destination_file.txt')# 移动文件 shutil.move('source_file.txt', 'new_location/source_file.txt')# 删除目录及其内容 shutil.rmtree('directory_to_remove')
-
subprocess
- 用于调用外部命令并获取输出结果。
import subprocess# 执行命令并捕获输出 result = subprocess.run(['ls', '-l'], capture_output=True, text=True) print(result.stdout)
-
argparse
- 解析命令行参数。
import argparseparser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+',help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const',const=sum, default=max,help='sum the integers (default: find the max)')args = parser.parse_args() print(args.accumulate(args.integers))
-
pandas
- 数据分析和处理的强大工具,特别适用于表格数据。
import pandas as pd# 创建 DataFrame df = pd.DataFrame({'A': ['foo', 'bar', 'baz'],'B': [1, 2, 3] })# 查看前几行数据 print(df.head())# 进行数据筛选 filtered_df = df[df['B'] > 1] print(filtered_df)
-
requests
- 发送 HTTP 请求并处理响应。
import requestsresponse = requests.get('https://api.github.com/events') print(response.status_code) print(response.json())
-
smtplib
- 发送电子邮件。
import smtplib from email.mime.text import MIMETextmsg = MIMEText('This is the body of the email') msg['Subject'] = 'Test Email' msg['From'] = 'from@example.com' msg['To'] = 'to@example.com'with smtplib.SMTP('smtp.example.com') as server:server.login('username', 'password')server.send_message(msg)
实用技巧
-
虚拟环境
- 使用虚拟环境管理项目的依赖关系,避免不同项目之间的依赖冲突。
python -m venv myenv source myenv/bin/activate # Linux/MacOS myenv\Scripts\activate # Windows
-
日志记录
- 使用
logging
模块记录程序运行时的信息,便于调试和维护。
import logginglogging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__)logger.debug('Debug message') logger.info('Info message') logger.warning('Warning message') logger.error('Error message') logger.critical('Critical message')
- 使用
-
异常处理
- 使用
try-except
结构捕捉和处理异常。
try:x = 1 / 0 except ZeroDivisionError as e:print(f"Caught an exception: {e}") finally:print("This will always execute")
- 使用
-
上下文管理器
- 使用
with
语句自动管理资源,确保资源正确释放。
with open('file.txt', 'r') as f:content = f.read()print(content)
- 使用
-
列表推导式
- 使用列表推导式简化代码,提高可读性和效率。
numbers = [1, 2, 3, 4, 5] squares = [x**2 for x in numbers if x % 2 == 0] print(squares) # 输出: [4, 16]
-
使用PYTHON 进行CSV文件的数据处理demo
import numpy as np #导入numpy库,用于计算 import pandas as pd #导入pandas库,用于CSV文件处理 import matplotlib.pyplot as plt #导入matplotlib.pyplot库,用于绘图 from matplotlib.pylab import mpl #导入mpl函数,用于显示中文和负号mpl.rcParams['font.sans-serif'] = ['SimHei'] #显示中文 mpl.rcParams['axes.unicode_minus']=False #显示负号path = 'test.csv' #csv文件路径 data = pd.read_csv(path) #读取 csv文件Before_result = data['BEFORE'] #导出BEFORE列的数据 BEFORE为第一行数据,也是索引 After_result = data['AFTER'] #导出AFTER列的数据 Delta_result = data['DELTA'] #导出DELTA列的数据N = 500 t = np.arange(N)+1 #得到1:500的数据plt.figure() plt.plot(t,Before_result, 'b.-') plt.title('Before_result') plt.show()plt.figure() plt.plot(t,After_result, 'b.-') plt.title('After_result') plt.show()plt.figure() plt.plot(t,Delta_result, 'b.-') plt.title('Delta_result') plt.show()
-
计算指数和取整
- 使用 math.pow() 函数Python 的 math 模块也提供了一个 pow() 函数,它可以用于浮点数的幂运算。需要注意的是,math.pow() 总是返回一个浮点数。
- 请注意,由于 math.pow() 返回的是浮点数,所以在处理整数指数时可能会有精度损失或不必要的浮点数表示。
import math result = math.pow(2, exponent) print(round(1.4)) # 输出: 1 print(round(1.5)) # 输出: 2 print(round(1.6)) # 输出: 2 print(round(1.23, 1)) # 输出: 1.2 print(round(1.27, 1)) # 输出: 1.3
-
十六进制转换
- 函数hex() 是 Python 内置的一个函数,可以直接将整数转换为以 ‘0x’ 开头的小写十六进制字符串。
- 语法:hex(number)•number:需要转换为十六进制的十进制整数。decimal_number = 255
hexadecimal_string = hex(decimal_number)print(hexadecimal_string) # 输出: 0xff
- python如果你不想让结果包含 ‘0x’ 前缀,可以使用切片操作去除它:
hexadecimal_string_no_prefix = hex(decimal_number)[2:]print(hexadecimal_string_no_prefix) # 输出: ff
-
FFT分析
import numpy as np #数值计算库 from scipy.fftpack import fft #基于 Numpy 的科学计算库,用于数学、科学、工程学等领域 import matplotlib.pyplot as plt #MATLAB类似的绘图API from matplotlib.pylab import mpl #许多NumPy和pyplot模块中常用的函数,方便用户快速进行计算和绘图mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文 mpl.rcParams['axes.unicode_minus'] = False # 显示负号# 采样点选择1400个,因为设置的信号频率分量最高为600赫兹,根据采样定理知采样频率要大于信号频率2倍, # 所以这里设置采样频率为1400赫兹(即一秒内有1400个采样点,一样意思的) N = 1400 x = np.linspace(0, 1, N)# 设置需要采样的信号,频率分量有0,200,400和600 y = 7 * np.sin(2 * np.pi * 200 * x) + 5 * np.sin(2 * np.pi * 400 * x) + 3 * np.sin(2 * np.pi * 600 * x) + 10fft_y = fft(y) # 快速傅里叶变换x = np.arange(N) # 频率个数 half_x = x[range(int(N / 2))] # 取一半区间angle_y = np.angle(fft_y) # 取复数的角度abs_y = np.abs(fft_y) # 取复数的绝对值,即复数的模(双边频谱) normalization_y = abs_y / (N / 2) # 归一化处理(双边频谱) normalization_y[0] /= 2 # 归一化处理(双边频谱) normalization_half_y = normalization_y[range(int(N / 2))] # 由于对称性,只取一半区间(单边频谱)plt.subplot(231) plt.plot(x, y) plt.title('原始波形')plt.subplot(232) plt.plot(x, fft_y, 'black') plt.title('双边振幅谱(未求振幅绝对值)', fontsize=9, color='black')plt.subplot(233) plt.plot(x, abs_y, 'r') plt.title('双边振幅谱(未归一化)', fontsize=9, color='red')plt.subplot(234) plt.plot(x, angle_y, 'violet') plt.title('双边相位谱(未归一化)', fontsize=9, color='violet')plt.subplot(235) plt.plot(x, normalization_y, 'g') plt.title('双边振幅谱(归一化)', fontsize=9, color='green')plt.subplot(236) plt.plot(half_x, normalization_half_y, 'blue') plt.title('单边振幅谱(归一化)', fontsize=9, color='blue')plt.show()