Python中如何实现Leetcode刷题后自动同步代码到Github
老实说题目暂时没刷多少,先写个自动下载代码并生成自动生成 Readme 的工具方便发布到 Github
详情见 https://github.com/bonfy/leetcode
前方预警,注意里面的 leetcode_generate.py
无图无真相

Python中如何实现Leetcode刷题后自动同步代码到Github
14 回复
虽然看起来很厉害, 但是这个究竟是干什么的?
这个需求很实用,我通常用一个脚本搞定。核心思路是:刷完题后,脚本自动将指定目录的代码提交到GitHub。
下面是一个完整的实现方案。你需要先准备好GitHub仓库,并配置好SSH密钥。
import os
import subprocess
import datetime
import json
from pathlib import Path
class LeetcodeGitSync:
def __init__(self, repo_path, leetcode_dir, github_url):
"""
repo_path: 本地Git仓库路径
leetcode_dir: LeetCode代码存放目录
github_url: GitHub仓库URL
"""
self.repo_path = Path(repo_path)
self.leetcode_dir = Path(leetcode_dir)
self.github_url = github_url
# 确保目录存在
self.repo_path.mkdir(parents=True, exist_ok=True)
self.leetcode_dir.mkdir(parents=True, exist_ok=True)
# 初始化Git仓库(如果不存在)
self._init_git_repo()
def _run_git_command(self, cmd):
"""执行Git命令"""
try:
result = subprocess.run(
cmd,
cwd=self.repo_path,
shell=True,
capture_output=True,
text=True
)
if result.returncode != 0:
print(f"Git命令执行失败: {cmd}")
print(f"错误信息: {result.stderr}")
return result
except Exception as e:
print(f"执行Git命令时出错: {e}")
return None
def _init_git_repo(self):
"""初始化Git仓库"""
if not (self.repo_path / ".git").exists():
print("初始化Git仓库...")
self._run_git_command("git init")
self._run_git_command(f"git remote add origin {self.github_url}")
def sync_to_github(self, commit_message=None):
"""同步代码到GitHub"""
if not commit_message:
commit_message = f"LeetCode刷题更新 {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
# 复制LeetCode代码到仓库
self._copy_leetcode_files()
# 检查是否有变更
status_result = self._run_git_command("git status --porcelain")
if not status_result.stdout.strip():
print("没有检测到代码变更,跳过提交")
return
# 添加所有文件
print("添加文件到Git...")
self._run_git_command("git add .")
# 提交
print("提交更改...")
self._run_git_command(f'git commit -m "{commit_message}"')
# 推送到GitHub
print("推送到GitHub...")
push_result = self._run_git_command("git push origin main")
if push_result and push_result.returncode == 0:
print("✅ 代码已成功同步到GitHub!")
else:
print("❌ 推送失败,请检查网络或仓库权限")
def _copy_leetcode_files(self):
"""复制LeetCode代码文件到Git仓库"""
import shutil
# 清空目标目录(保留.git文件夹)
for item in self.repo_path.iterdir():
if item.name != ".git":
if item.is_dir():
shutil.rmtree(item)
else:
item.unlink()
# 复制LeetCode文件
for item in self.leetcode_dir.iterdir():
if item.is_file() and item.suffix in ['.py', '.java', '.cpp', '.js']:
shutil.copy2(item, self.repo_path / item.name)
elif item.is_dir():
shutil.copytree(item, self.repo_path / item.name, dirs_exist_ok=True)
# 创建README文件(可选)
readme_content = f"""# LeetCode Solutions
自动同步于 {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
包含以下题目:
{self._generate_problem_list()}
"""
(self.repo_path / "README.md").write_text(readme_content)
def _generate_problem_list(self):
"""生成题目列表"""
problems = []
for file in self.repo_path.glob("*.py"):
problems.append(f"- {file.stem}")
return "\n".join(problems)
# 使用示例
if __name__ == "__main__":
# 配置参数
REPO_PATH = "/path/to/your/git/repo" # 本地Git仓库路径
LEETCODE_DIR = "/path/to/your/leetcode/solutions" # LeetCode代码目录
GITHUB_URL = "git@github.com:yourusername/leetcode-solutions.git" # GitHub仓库URL
# 创建同步器并执行
sync = LeetcodeGitSync(REPO_PATH, LEETCODE_DIR, GITHUB_URL)
sync.sync_to_github()
使用说明:
- 安装依赖:只需要Python标准库,无需额外安装
- 配置参数:修改脚本底部的三个路径参数
- 定时执行:可以设置cron job(Linux/Mac)或计划任务(Windows)自动运行
- 手动触发:刷完题后直接运行脚本
进阶优化(如果你需要):
- 添加
.gitignore文件忽略不必要的文件 - 支持按题目分类存储
- 添加提交前代码检查
- 记录刷题统计信息
这个脚本的核心就是自动化的文件复制和Git操作,你可以根据自己的目录结构进行调整。
一句话总结:用Python脚本自动化Git操作,实现刷题代码自动同步。
用来下载自己写过的 solution
mark
楼上正解,握爪
哦 这样的话 看起来还不错
挺方便的,谢谢楼主
看了楼主的工具,去完成了我的第一道题目 
:smiley:
wakaka
目前只做了 20 道
我也只做了一点点, 慢慢来嘛 :)
请问 你代码实现是不是上传的 运行时间最短的?我想只上传最近一次提交的,怎么修改代码?多谢!
楼主你好,我用你这个 generate 出了点问题,已经开 issue 了,求解决下。T T
https://github.com/bonfy/leetcode/issues/17

