You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python检查GitHub仓库文件是否存在?无需下载大文件

用Python列出GitHub仓库目录的优雅方案(无需下载文件或解析HTML)

当然可以!解析HTML确实是个不太可靠的办法——GitHub页面结构随时可能变,维护起来太麻烦。其实GitHub官方提供了REST API和GraphQL API,这才是更优雅、稳定的方式,完全不需要下载仓库内容,甚至不用碰网页解析。下面给你两种实用的实现方式,还会帮你解决可能的安装问题:

方法一:使用GitHub REST API(简单易上手)

REST API是最直接的方式,对于公开仓库甚至不需要认证(私有仓库需要生成一个个人访问token),可以直接获取指定目录下的所有文件和文件夹信息。

代码示例

首先确保你安装了requests库,如果之前安装失败,试试国内镜像源:

pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

然后用以下代码检查文件是否存在:

import requests

def check_file_in_github(repo_owner, repo_name, target_file, path=""):
    # 构造API请求URL
    url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/contents/{path}"
    response = requests.get(url)
    
    if response.status_code != 200:
        print(f"请求失败:{response.json().get('message', '未知错误')}")
        return False
    
    # 遍历目录下的所有项
    for item in response.json():
        if item["name"] == target_file:
            print(f"找到目标文件:{item['html_url']}")
            # 如果需要查看文件大小(比如判断是否是大文件)
            print(f"文件大小:{item['size'] / 1024 / 1024:.2f} MB")
            return True
        # 如果是文件夹,递归检查(可选,根据你的需求)
        if item["type"] == "dir":
            if check_file_in_github(repo_owner, repo_name, target_file, item["path"]):
                return True
    return False

# 示例:检查tensorflow/tensorflow仓库根目录下是否有README.md
if check_file_in_github("tensorflow", "tensorflow", "README.md"):
    print("文件存在!")
else:
    print("文件不存在。")

说明

  • 这个方法会递归遍历目录(如果需要的话),你可以根据需求关闭递归,只检查指定路径
  • 私有仓库需要在请求头里添加Authorization: token YOUR_TOKEN,token可以在GitHub的Settings -> Developer settings里生成
  • API有速率限制,匿名请求每小时60次,认证后每小时5000次,完全够用日常检查

方法二:使用GitHub GraphQL API(更灵活高效)

如果你需要更精准的查询(比如直接筛选大文件,或者只获取特定字段),GraphQL API会更高效——它只返回你需要的数据,减少网络传输量。

代码示例

同样先确保requests安装成功,然后:

import requests

def check_large_file_in_github(repo_owner, repo_name, target_file, min_size_mb=100):
    # GraphQL查询语句,只获取需要的字段
    query = f"""
    query {{
      repository(owner: "{repo_owner}", name: "{repo_name}") {{
        object(expression: "HEAD:") {{
          ... on Tree {{
            entries {{
              name
              type
              object {{
                ... on Blob {{
                  size
                }}
              }}
            }}
          }}
        }}
      }}
    }}
    """
    # 私有仓库需要替换成你的token,公开仓库可以暂时留空,但速率限制很严
    headers = {"Authorization": "token YOUR_TOKEN"}
    response = requests.post("https://api.github.com/graphql", json={"query": query}, headers=headers)
    
    if response.status_code != 200:
        print(f"请求失败:{response.json().get('message', '未知错误')}")
        return False
    
    data = response.json()
    entries = data["data"]["repository"]["object"]["entries"]
    
    for entry in entries:
        if entry["name"] == target_file and entry["type"] == "blob":
            file_size_mb = entry["object"]["size"] / 1024 / 1024
            if file_size_mb >= min_size_mb:
                print(f"找到目标大文件:{entry['name']},大小:{file_size_mb:.2f} MB")
                return True
            else:
                print(f"找到文件,但大小不足{min_size_mb} MB")
                return True
    return False

# 示例:检查pytorch/pytorch仓库根目录下是否有大于100MB的LICENSE文件
if check_large_file_in_github("pytorch", "pytorch", "LICENSE"):
    print("符合条件的文件存在!")
else:
    print("文件不存在或大小不达标。")

说明

  • GraphQL的优势是可以自定义返回字段,比如你只需要文件名和大小,就不会返回多余的内容
  • 同样,私有仓库必须用token,公开仓库建议用token来提升速率限制
  • 如果需要查询子目录,可以修改expression参数,比如HEAD:docs来查询docs目录下的内容

解决安装问题的小技巧

如果你之前安装BeautifulSoup或requests遇到问题,大概率是网络原因:

  • 用国内PyPI镜像源安装,比如清华源:pip install requests beautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 如果是虚拟环境问题,先确认你激活了对应的虚拟环境再执行安装命令

内容的提问来源于stack exchange,提问作者Jakub Bláha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:26:06