pymol常用代码归纳 1.化合物以球棍形式展开# 先确保棍状显示 show sticks, mol1 # 再添加球形显示球棍模型 show spheres, mol1 # 如果想调整球的大小 set sphere_scale, 0.2, mol1 # 调整球的大小比例一般0.1-0.32.代码对接后文件夹精简import os import shutil def main(): # 1. 输入一级文件夹路径 root input(请输入一级文件夹完整路径).strip() root root.strip() if not os.path.isdir(root): print(❌ 错误路径不存在或不是文件夹) input(\n按回车键退出...) return # 拆分路径父目录 原文件夹名 root_parent os.path.dirname(root) root_name os.path.basename(root) # 备份文件夹名同目录备份 backup_root os.path.join(root_parent, root_name _备份副本) print(f\n 原一级目录{root}) print(f 即将备份到{backup_root}) # 2. 先完整复制备份整个一级文件夹 try: shutil.copytree(root, backup_root) print(✅ 备份完成开始处理文件夹结构...\n) except Exception as e: print(f❌ 备份失败{e}) input(\n按回车键退出...) return # 3. 遍历所有二级文件夹 for second_name in os.listdir(root): second_path os.path.join(root, second_name) if not os.path.isdir(second_path): continue print(f 处理二级文件夹{second_name}) # 3.1 删除二级文件夹里所有【文件】保留三级子文件夹 for item in os.listdir(second_path): item_path os.path.join(second_path, item) if os.path.isfile(item_path): try: os.remove(item_path) print(f 已删除文件{item}) except Exception as e: print(f ❌ 删除失败 {item}{e}) # 3.2 移动所有三级文件夹到一级目录 for third_name in os.listdir(second_path): third_path os.path.join(second_path, third_name) if not os.path.isdir(third_path): continue target_path os.path.join(root, third_name) # 同名跳过不覆盖 if os.path.exists(target_path): print(f ⚠️ 跳过已存在同名文件夹{third_name}) continue shutil.move(third_path, target_path) print(f ✅ 移动三级文件夹{third_name} 到一级目录) # 3.3 删除空的二级文件夹 try: if not os.listdir(second_path): shutil.rmtree(second_path) print(f ️ 已删除空二级文件夹{second_name}\n) except Exception as e: print(f ❌ 无法删除二级文件夹 {second_name}{e}\n) # 4. 操作完成询问是否正确 print( * 60) choice input(所有结构处理完成\n操作是否正确(y 确认保留 / n 还原恢复)).strip().lower() if choice y: # 确认正确删除备份副本 try: shutil.rmtree(backup_root) print(\n✅ 已删除备份副本操作永久生效) except Exception as e: print(f\n❌ 删除备份失败{e}) else: # 不正确还原——删除修改后的原文件夹把备份改回原名 try: # 删除已经改过的原文件夹 shutil.rmtree(root) # 备份重命名为原来的名字 os.rename(backup_root, root) print(\n 已还原删除修改版备份恢复为原文件夹) except Exception as e: print(f\n❌ 还原失败{e}) input(\n按回车键关闭窗口...) if __name__ __main__: main()3.给pictures重命名import os import shutil # 输入一级文件夹路径 root input(请输入一级文件夹完整路径).strip().strip() if not os.path.isdir(root): print(路径无效请重新运行) exit() # 1. 先备份一级文件夹 parent_dir os.path.dirname(root) base_name os.path.basename(root) backup_dir os.path.join(parent_dir, base_name _备份) print(\n正在备份原文件夹...) shutil.copytree(root, backup_dir) print(✅ 备份完成, backup_dir) # 2. 遍历所有二级子文件夹 for subfolder in os.listdir(root): sub_path os.path.join(root, subfolder) if not os.path.isdir(sub_path): continue # 删除指定两个文件 del_files [mol1.mol2, rep.pdb] for fname in del_files: fpath os.path.join(sub_path, fname) if os.path.exists(fpath): os.remove(fpath) # 获取当前文件夹剩余所有文件 file_list [f for f in os.listdir(sub_path) if os.path.isfile(os.path.join(sub_path, f))] for fname in file_list: old_path os.path.join(sub_path, fname) # 处理pdb重命名为 文件夹名_complex.pdb if fname.lower().endswith(.pdb): new_pdb_name f{subfolder}_complex.pdb new_pdb_path os.path.join(sub_path, new_pdb_name) os.rename(old_path, new_pdb_path) # 其他文件文件夹名_原文件名 else: new_fname f{subfolder}_{fname} new_path os.path.join(sub_path, new_fname) os.rename(old_path, new_path) # 3. 一级文件夹下新建complex文件夹 complex_target os.path.join(root, complex) os.makedirs(complex_target, exist_okTrue) # 4. 复制 complex.pdb 到complex文件夹原文件保留只复制 for subfolder in os.listdir(root): sub_path os.path.join(root, subfolder) if not os.path.isdir(sub_path) or subfolder complex: continue # 拼接complex pdb文件名 cmp_file f{subfolder}_complex.pdb cmp_path os.path.join(sub_path, cmp_file) if os.path.exists(cmp_path): shutil.copy2(cmp_path, complex_target) # 5. 询问是否修改正确 print(\n 所有处理完成 ) ans input(修改是否正确(y/n)).strip().lower() if ans y: shutil.rmtree(backup_dir) print(✅ 确认无误已删除备份) else: # 还原原始文件夹 shutil.rmtree(root) os.rename(backup_dir, root) print( 已还原为原始状态所有修改撤销) input(\n按回车退出...)4.服务器对接后整理文件夹内容import os import tkinter as tk from tkinter import filedialog, messagebox # -------------------------- 配置项你无需修改 -------------------------- KEEP_FILES {rep.pdb, mol1.mol2} # 要保留的文件 def clean_folder(): # 初始化窗口隐藏主窗口 root tk.Tk() root.withdraw() # 让用户选择一级文件夹 root_dir filedialog.askdirectory(title请选择【一级文件夹】) if not root_dir: messagebox.showwarning(提示, 未选择文件夹程序退出) return # 确认开始 if not messagebox.askyesno(确认, f即将清理\n{root_dir}\n\n确定继续吗): return print(\n 开始清理 ) print(f一级目录{root_dir}\n) # 遍历 二级文件夹 for second_name in os.listdir(root_dir): second_path os.path.join(root_dir, second_name) # 只处理文件夹 if not os.path.isdir(second_path): continue print(f→ 处理二级文件夹{second_name}) # 1. 清空二级文件夹下的所有文件 for item in os.listdir(second_path): item_path os.path.join(second_path, item) # 只删文件不删三级文件夹 if os.path.isfile(item_path): try: os.remove(item_path) print(f 删除文件{item}) except Exception as e: print(f 删除失败{item}原因{e}) # 2. 遍历三级文件夹只保留指定文件 for third_name in os.listdir(second_path): third_path os.path.join(second_path, third_name) if not os.path.isdir(third_path): continue print(f ↳ 清理三级文件夹{third_name}) # 遍历三级文件夹内所有文件 for filename in os.listdir(third_path): file_path os.path.join(third_path, filename) if os.path.isfile(file_path): # 不在保留列表里 → 删除 if filename.lower() not in KEEP_FILES: try: os.remove(file_path) print(f 删除{filename}) except Exception as e: print(f 删除失败{filename}原因{e}) print(\n 清理全部完成) messagebox.showinfo(完成, 文件夹已清理完毕\n只保留 rep.pdb 和 mol1.mol2) if __name__ __main__: clean_folder()5.服务器对接/data/run01/sczc900/00WYH/DOCK/0507 #化合物mol2,pdb,mol #蛋白pdb cd /data/run01/sczc900/00WYH/DOCK/0507 # 1先激活环境 conda activate docking_env # 2 运行命令 runDOCK1 conda activate docking_env runDOCK16.导出当前蛋白序列到当前项目文件夹一、这条命令说明save protein_all.fasta, SRC-1TIF2含义把名为 SRC-1TIF2 的整个对象直接导出为 fasta 序列文件。二、潜在问题修正写法1. 如果结构里含水分子、配体、离子直接导出会混入杂项只导出蛋白序列建议加筛选# 只导出蛋白主链序列排除水、小分子、核酸save protein_all.fasta, SRC-1TIF2 and polymer.protein2. 只想单独导出某条链示例A链save chainA.fasta, SRC-1TIF2 and polymer.protein and chain A括号里填你的结构筛选语句给你分场景直接套用1. 导出整个蛋白推荐标准写法剔除水/配体pymolsave protein_all.fasta, SRC-1TIF2 and polymer.protein2. 只导出A链蛋白序列pymolsave protein_all.fasta, SRC-1TIF2 and polymer.protein and chain A3. 导出A、B两条链pymolsave protein_all.fasta, SRC-1TIF2 and polymer.protein and (chain A or chain B)4. 只导出A链 20–80号残基片段pymolsave protein_all.fasta, SRC-1TIF2 and polymer.protein and chain A and resi 20-80补充说明1. 逗号后半段是选择集必须写上你的对象名 SRC-1TIF2 2. 不加 polymer.protein 容易把水分子、小分子配体一并导出序列错乱3. 想自定义保存位置把前面文件名改成完整路径示例pymolsave D:/protein/protein_all.fasta, SRC-1TIF2 and polymer.protein