Python常用操作汇总
Python 中 查看和探索对象(如 DataFrame、AnnData、Numpy 数组、自定义类等) 的 常用方法汇总,这对调试和数据理解非常重要:
✅ Python 查看对象的常用方法汇总
🔹 1. 通用对象检查(适用于任何 Python 对象)
命令 | 说明 |
---|---|
type(obj) |
查看对象类型 |
dir(obj) |
查看对象支持的属性和方法(最常用) |
vars(obj) |
查看对象的 __dict__ 属性(适用于类实例) |
help(obj) |
查看对象的说明文档 |
isinstance(obj, ClassName) |
判断对象是否是某类的实例 |
hasattr(obj, 'attr') |
是否具有某属性 |
getattr(obj, 'attr') |
获取属性的值 |
🔹 2. Numpy 数组
import numpy as np
x = np.array([[1, 2], [3, 4]])
x.shape # 查看维度
x.dtype # 数据类型
x.ndim # 维度数量
x.size # 总元素个数
x.itemsize # 单个元素字节数
x.nbytes # 总字节数
🔹 3. Pandas DataFrame / Series
import pandas as pd
df = pd.read_csv('file.csv')
df.shape # 行列数
df.columns # 列名
df.dtypes # 每列的数据类型
df.info() # 数据整体信息
df.head() # 查看前几行
df.tail() # 查看后几行
df.describe() # 简要统计描述
df.index # 索引信息
df.values # 转换为numpy数组
df.isnull().sum() # 缺失值统计
🔹 4. Scanpy AnnData 对象
import scanpy as sc
adata = sc.read_h5ad('data.h5ad')
type(adata) # <class 'anndata._core.anndata.AnnData'>
adata.shape # (cells, genes)
adata.obs # 细胞元数据(DataFrame)
adata.var # 基因元数据(DataFrame)
adata.X # 表达矩阵(稀疏或 dense)
adata.raw # 原始表达数据(可选)
adata.uns # 存储分析结果(dict)
adata.obsm # 存储低维坐标(PCA, UMAP等)
adata.var_names # 基因名
adata.obs_names # 细胞名
adata.is_view # 是否是一个视图
adata.obs.columns # 查看 obs 的列
adata.var.columns # 查看 var 的列
adata.obsm.keys() # 查看 obsm 中存储的坐标名
adata.uns.keys() # 查看分析结果的键名
🔹 5. 类与实例对象
class Person:
def __init__(self, name):
self.name = name
self.age = 18
p = Person("Tom")
vars(p) # {'name': 'Tom', 'age': 18}
dir(p) # 查看方法列表
hasattr(p, 'name') # True
getattr(p, 'age') # 18
🔹 6. 补充调试建议
# 用 pprint 友好打印嵌套结构(如 dict、list)
from pprint import pprint
pprint(adata.uns)
# 用 json 更美观地显示字典(需先转换)
import json
print(json.dumps(dict(adata.uns), indent=4, default=str))
🧠 小技巧
你可以用 IPython / Jupyter Notebook 中的:
obj? # 快速查看文档(如 `adata?`)
obj?? # 查看源码(如 `sc.pp.pca??`)
以下是 Python 文件与目录操作 中最常用和实用的函数、方法和模块的详尽总结,适用于文件读取、写入、管理、目录导航、压缩文件处理等多种情境。
🧱 模块一览
模块名 | 主要用途 |
---|---|
os |
文件路径、目录、系统级操作 |
pathlib |
面向对象的路径处理(推荐用法) |
shutil |
高级文件/目录复制与移动 |
open() |
读写普通文本或二进制文件 |
gzip |
解压 .gz 文件 |
glob |
文件通配符查找(如 *.csv ) |
📁 路径与目录操作
✅ 使用 os
模块
import os
os.getcwd() # 获取当前工作目录
os.chdir('path') # 改变当前工作目录
os.listdir('path') # 列出目录中的所有文件和子目录
os.mkdir('new_folder') # 创建单层目录
os.makedirs('a/b/c') # 创建多层目录
os.rmdir('folder') # 删除空目录
os.remove('file.txt') # 删除文件
os.rename('old', 'new') # 重命名文件或目录
os.path.exists('file') # 判断路径是否存在
os.path.isfile('file') # 是否是文件
os.path.isdir('folder') # 是否是目录
os.path.getsize('file') # 获取文件大小(字节)
✅ 使用 pathlib
(现代推荐)
from pathlib import Path
p = Path('.')
p.cwd() # 当前路径
list(p.iterdir()) # 列出目录下所有内容
(p / 'file.txt').exists() # 路径是否存在
(p / 'folder').is_dir() # 是否是目录
(p / 'file.txt').is_file() # 是否是文件
(p / 'new.txt').unlink() # 删除文件
(p / 'new_dir').mkdir() # 创建目录
📄 文件读写操作
✅ 打开并读取文本文件
with open('file.txt', 'r', encoding='utf-8') as f:
content = f.read() # 读取全部内容
lines = f.readlines() # 读取为行列表
✅ 写入或追加
# 覆盖写入
with open('file.txt', 'w') as f:
f.write('Hello, world!\n')
# 追加内容
with open('file.txt', 'a') as f:
f.write('Add another line\n')
✅ 二进制读写
# 读取图片或模型数据
with open('image.jpg', 'rb') as f:
binary = f.read()
# 写入二进制数据
with open('copy.jpg', 'wb') as f:
f.write(binary)
📦 处理压缩文件(.gz)
import gzip
# 读取 gzip 压缩文本文件
with gzip.open('data.csv.gz', 'rt') as f:
for line in f:
print(line.strip())
# 写入 gzip 文件
with gzip.open('out.txt.gz', 'wt') as f:
f.write("Some text\n")
📑 批量查找文件(使用 glob
)
import glob
files = glob.glob('*.csv') # 当前目录下所有 CSV 文件
files = glob.glob('data/*.h5') # data 子目录下的 .h5 文件
📋 高级文件操作(使用 shutil
)
import shutil
shutil.copy('a.txt', 'b.txt') # 复制文件
shutil.copytree('src', 'dest') # 复制整个目录
shutil.move('a.txt', 'folder/') # 移动文件
shutil.rmtree('folder') # 删除整个目录(即使非空)
📦 获取文件属性
import os
from datetime import datetime
file = 'test.txt'
print(os.path.getsize(file)) # 文件大小(字节)
print(os.path.getmtime(file)) # 修改时间(timestamp)
print(datetime.fromtimestamp(os.path.getmtime(file))) # 转换为人类可读
✅ 推荐:常用文件操作封装示例函数
def read_text(path):
with open(path, 'r', encoding='utf-8') as f:
return f.read()
def write_text(path, content):
with open(path, 'w', encoding='utf-8') as f:
f.write(content)
在 Python 中,如果你想查看当前作用域中所有对象(变量)以及它们是否包含自定义方法,你可以使用以下技巧来查看对象的方法,包括自定义的。
✅ 1. 查看所有变量 / 对象
使用 globals()
或 locals()
查看当前命名空间的对象:
globals().keys()
或:
locals().keys()
✅ 2. 查看某个对象的方法
对某个对象 obj
,使用 dir(obj)
可以列出它所有的属性和方法:
dir(obj)
这会包含内置属性(如 __init__
, __class__
等),你可以过滤掉这些魔术方法:
[name for name in dir(obj) if not name.startswith('__')]
✅ 3. 筛选自定义方法(非内置的)
如果你想查看某个对象的自定义方法,可以使用 inspect
模块:
import inspect
methods = inspect.getmembers(obj, predicate=inspect.ismethod)
print(methods)
或者如果是函数(函数对象或类的方法):
functions = inspect.getmembers(obj, predicate=inspect.isfunction)
✅ 4. 查看所有自定义类和函数
查看你定义的类和函数(忽略内建和导入的):
[name for name, val in globals().items() if inspect.isfunction(val) or inspect.isclass(val)]
🔍 示例
class MyClass:
def custom_method(self):
pass
obj = MyClass()
import inspect
print([name for name, _ in inspect.getmembers(obj, predicate=inspect.ismethod) if not name.startswith("__")])
输出:
['custom_method']