如何在同一存储库中使用 python 读取 github 文件?

How do I to read a github file with python in the same repository?

提问人:Mia Blake 提问时间:11/12/2023 最后编辑:Mia Blake 更新时间:11/20/2023 访问量:47

问:

当我尝试使用我的代码打开同一存储库中的文件时,我不断收到 FileNotFoundError。我想在“SpecLines_App”中使用“classifier_model.pkl”

import streamlit as st
import numpy as np
import pickle
import pandas as pd

#https://github.com/mblk3/MLM_Atomic_Spec_Lines/blob/02f6a04db06b459169ea0d19c347146ea1ad17d8/classifier_model.pkl
#joblibFile = open('code_/classifier_model.pkl', 'rb')
#joblibFile = open(url, 'rb')
#model = pickle.load(joblibFile)

model = pd.read_pickle(r'classifier_model.pkl')

^这是我尝试过的,我不确定为什么它不起作用。

我怎样才能打开它?

流光:classify-atomic-spec-lines.streamlit.app

github:github.com/mblk3/MLM_Atomic_Spec_Lines

Python GitHub 机器学习 存储库 streamlit

评论

1赞 Chris 11/12/2023
请阅读为什么我不应该上传代码/数据/错误的图片?您可以编辑您的问题并将图像替换为代码块。最简单的方法是将代码作为文本直接粘贴到您的问题中,然后选择它并单击代码块按钮。
0赞 Chris 11/12/2023
你是怎么运行的?它是否有效取决于工作目录。
0赞 Sal 11/12/2023
尝试从同一目录运行该文件。或者,提供 pd.read_pickle() 的完整文件路径。如果不了解您的文件结构、您运行的命令、您从哪里运行命令以及可能收到的特定错误,就很难知道问题是什么。
0赞 Mia Blake 11/12/2023
@Chris 我正在使用 streamlit 运行 - classify-atomic-spec-lines.streamlit.appgithub.com/mblk3/MLM_Atomic_Spec_Lines)。我尝试了不同的文件路径,并且直接从 github 路径复制。我应该使用一些不同的东西吗
0赞 Mia Blake 11/12/2023
@Sal 对不起,是的,这是 github:github.com/mblk3/MLM_Atomic_Spec_Lines 和 streamlit 错误:classify-atomic-spec-lines.streamlit.app

答:

1赞 J_H 11/12/2023 #1

您正在尝试打开相对路径名,因此 CWD 很重要。您可以使用以下方法了解它的内容:

import os

print(os.getcwd())

在运行此程序之前,请考虑对新目录执行操作。cd


打开绝对路径名可能更可取。

这应该获取 git 存储库的位置:

from pathlib import Path
...
repo_top = Path(__file__ + "/..").resolve()
print(repo_top)
model = pd.read_pickle(repo_top / 'classifier_model.pkl')
0赞 Alex Silva 11/20/2023 #2

该文件似乎不存在在运行 streamlit 应用程序的当前 git 分支中。 因此,您将获得 .classifier_model.pklSpecLines_AppFileNotFoundError

要解决这个问题,至少有两种解决方案。选择哪一个更适合您的需求:

  1. 将该文件包含在当前的 git 分支中。 然后应该工作。classifier_model.pklmodel = pd.read_pickle('classifier_model.pkl')

  2. 如果文件不存在,请在运行时下载该文件(示例代码如下):classifier_model.pkl

...
import requests
from pathlib import Path

def download_model():
    url = 'https://github.com/mblk3/MLM_Atomic_Spec_Lines/raw/02f6a04db06b459169ea0d19c347146ea1ad17d8/classifier_model.pkl'
    local_filename = url.split('/')[-1]
    response = requests.get(url)
    open(local_filename, 'wb').write(response.content)

def is_model_found(file):
    model_path = Path(file)
    found = model_path.is_file()
    if not found:
        st.write(f"DEBUG: File `{model_path.absolute()}` not found. Let's download it! :arrow_down:")
        download_model()
    else:
        st.write(f"DEBUG: File `{model_path.absolute()}` found! :sunglasses:")
...

model_filename = "classifier_model.pkl"
is_model_found(model_filename)
model = pd.read_pickle(model_filename)