下载图片 从指定的 Typora Markdown 文件中提取所有图片链接,并将这些图片下载到本地的 downloaded_images
文件夹中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 import osimport reimport requestsfrom tkinter import filedialogimport tkinter as tkroot = tk.Tk() root.withdraw() typora_file_path = filedialog.askopenfilename(title="选择 Typora 文件" , filetypes=[("Markdown 文件" , "*.md" )]) if not typora_file_path: print ("未选择文件,退出..." ) exit() with open (typora_file_path, 'r' , encoding='utf-8' ) as file: content = file.read() img_links = re.findall(r'!\[.*?\]\((.*?)\)' , content) if not os.path.exists('downloaded_images' ): os.mkdir('downloaded_images' ) for i, img_link in enumerate (img_links): response = requests.get(img_link) if response.status_code == 200 : file_extension = os.path.splitext(img_link)[-1 ] new_filename = f'downloaded_images/{i + 1 } {file_extension} ' with open (new_filename, 'wb' ) as img_file: img_file.write(response.content) print (f'下载成功: {new_filename} ' ) else : print (f'下载失败: {img_link} ' ) print ('图片下载完成。' )
确保已安装所需的Python库,可以使用以下命令安装:
您可以使用上面提供的Python代码来下载Typora文件中的图片。以下是如何使用这个Python脚本的步骤:
复制上面的Python代码并粘贴到一个文本编辑器中(如Notepad++或Visual Studio Code)。
保存脚本文件并确保文件扩展名为.py
(例如download_typora_images.py
)。
打开命令行终端(例如cmd或终端)。
在终端中,导航到包含脚本文件的目录,使用cd
命令切换到该目录,例如:
1 cd /path /to/script/directory
运行脚本,使用以下命令:
1 python download_typora_images.py
确保您已安装了Python,并且python
命令可以在命令行中正常运行。
脚本将开始执行,根据Typora文件中的图片链接下载图片,并将它们以阿拉伯数字从小到大命名,保存在名为downloaded_images
的文件夹中。
请注意,脚本执行完成后,您将在脚本文件的目录中看到一个名为downloaded_images
的文件夹,其中包含下载的图片。确保在运行脚本之前备份Typora文件,以防万一。
替换域名 需求背景:hexo的_post文章目录下有50多个.md格式的文件,每个文件里面有图片链接,更换新的图床的域名。
功能:批量在指定文件夹中的所有 .md
文件中执行查找和替换操作。选择一个文件夹,并通过自定义对话框输入查找文本、替换文本以及选择是否使用正则表达式。然后,程序遍历文件夹中的所有 Markdown 文件,执行文本替换操作,若内容发生变化,会将修改后的内容写回文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 import osimport tkinter as tkfrom tkinter import filedialog, messageboxfrom tkinter.simpledialog import Dialogimport reclass SearchReplaceDialog (Dialog ): def __init__ (self, parent ): self.search_text = "" self.replace_text = "" self.use_regex = False super ().__init__(parent, title="查找和替换" ) def body (self, master ): tk.Label(master, text="查找文本:" ).grid(row=0 ) tk.Label(master, text="替换文本:" ).grid(row=1 ) self.search_entry = tk.Entry(master) self.replace_entry = tk.Entry(master) self.search_entry.grid(row=0 , column=1 ) self.replace_entry.grid(row=1 , column=1 ) self.mode_var = tk.BooleanVar(value=False ) tk.Radiobutton(master, text="全局替换" , variable=self.mode_var, value=False ).grid(row=2 , column=0 , columnspan=2 ) tk.Radiobutton(master, text="正则表达式" , variable=self.mode_var, value=True ).grid(row=2 , column=1 , columnspan=2 ) return self.search_entry def apply (self ): self.search_text = self.search_entry.get() self.replace_text = self.replace_entry.get() self.use_regex = self.mode_var.get() def main (): root = tk.Tk() root.withdraw() folder_path = filedialog.askdirectory(title="请选择文件夹" ) if not folder_path: print ("未选择文件夹,操作取消。" ) return dialog = SearchReplaceDialog(root) search_text = dialog.search_text replace_text = dialog.replace_text use_regex = dialog.use_regex if not search_text or not replace_text: print ("查找或替换文本为空,操作取消。" ) return for root, dirs, files in os.walk(folder_path): for file in files: if file.endswith(".md" ): file_path = os.path.join(root, file) with open (file_path, 'r' , encoding='utf-8' ) as f: content = f.read() if use_regex: new_content = re.sub(search_text, replace_text, content, flags=re.DOTALL) else : new_content = content.replace(search_text, replace_text) if content != new_content: with open (file_path, 'w' , encoding='utf-8' ) as f: f.write(new_content) print (f"替换成功:{file_path} " ) else : print (f"未发现替换内容:{file_path} " ) print ("替换操作完成!" ) if __name__ == "__main__" : main()
生成树状目录结构 功能:win10环境生成树状目录结构
先安装treelib
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 from tkinter import Tk, filedialog, simpledialogimport sysfrom pathlib import Pathfrom treelib import Treedef select_root_directory (): root = Tk() root.withdraw() folder_selected = filedialog.askdirectory(title="请选择根目录" ) if not folder_selected: print ("未选择目录,程序退出。" ) sys.exit() return folder_selected def build_tree (tree, root_path, depth, parent=None , level=0 ): if level > depth: return root_path = Path(root_path) node_name = root_path.name if parent is None : tree.create_node(node_name, root_path, parent=parent) else : tree.create_node(node_name, root_path, parent=parent) for child in root_path.iterdir(): if child.is_dir(): build_tree(tree, child, depth, root_path, level + 1 ) def save_tree_to_file (tree, output_file="directory_structure.txt" ): tree_output = tree.show(line_type="ascii" , stdout=False ) tree_output = tree_output.replace('+--' , '└──' ) with open (output_file, 'w' , encoding='utf-8' ) as f: f.write(tree_output) print (f"目录结构已保存到 {output_file} " ) if __name__ == "__main__" : root_dir = select_root_directory() Tk().withdraw() max_depth = simpledialog.askinteger("输入目录级数" , "请输入要显示的目录层级:" , minvalue=1 ) directory_tree = Tree() build_tree(directory_tree, root_dir, max_depth) save_tree_to_file(directory_tree)
提取链接 需求背景:使用批量准转存夸克云盘链接工具
的时候需要把云盘分享链接一行一个的保存到txt文件里面。
功能:从选择的 .txt
文件中提取所有 HTTP 或 HTTPS 开头的链接,并将这些链接保存到一个新的文本文件中。通过文件选择对话框选取文件后,程序读取文件内容并使用正则表达式提取链接。提取到的链接会被写入一个新文件,文件名是原文件名加上 _links_only
后缀。如果没有找到链接,则会显示提示信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 import tkinter as tkfrom tkinter import filedialogimport redef extract_links_from_text (text ): return re.findall(r'https?://[^\s]+' , text) def main (): root = tk.Tk() root.withdraw() file_path = filedialog.askopenfilename(filetypes=[("Text files" , "*.txt" )]) if not file_path: print ("未选择文件" ) return with open (file_path, 'r' , encoding='utf-8' ) as file: content = file.read() links = extract_links_from_text(content) if links: output_path = file_path.replace('.txt' , '_links_only.txt' ) with open (output_path, 'w' , encoding='utf-8' ) as output_file: for link in links: output_file.write(link + '\n' ) print (f"提取的链接已保存到:{output_path} " ) else : print ("未找到链接" ) if __name__ == "__main__" : main()