Comment télécharger et écrire un fichier à partir de Github à l'aide de Requêtes
Permet de dire, il y a un fichier qui vit au dépôt github:
https://github.com/someguy/brilliant/blob/master/somefile.txt
Je suis en train d'utiliser des requêtes à la demande de ce fichier, écrire le contenu sur le disque dans le répertoire de travail actuel où il peut être utilisé plus tard. Maintenant, je suis en utilisant le code suivant:
import requests
from os import getcwd
url = "https://github.com/someguy/brilliant/blob/master/somefile.txt"
directory = getcwd()
filename = directory + 'somefile.txt'
r = requests.get(url)
f = open(filename,'w')
f.write(r.content)
Sans doute laid, et surtout, pas de travail. Au lieu de l'attendu de texte, j'obtiens:
<!DOCTYPE html>
<!--
Hello future GitHubber! I bet you're here to remove those nasty inline styles,
DRY up these templates and make 'em nice and re-usable, right?
Please, don't. https://github.com/styleguide/templates/2.0
-->
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Page not found · GitHub</title>
<style type="text/css" media="screen">
body {
background: #f1f1f1;
font-family: "HelveticaNeue", Helvetica, Arial, sans-serif;
text-rendering: optimizeLegibility;
margin: 0; }
.container { margin: 50px auto 40px auto; width: 600px; text-align: center; }
a { color: #4183c4; text-decoration: none; }
a:visited { color: #4183c4 }
a:hover { text-decoration: none; }
h1 { letter-spacing: -1px; line-height: 60px; font-size: 60px; font-weight: 100; margin: 0px; text-shadow: 0 1px 0 #fff; }
p { color: rgba(0, 0, 0, 0.5); margin: 20px 0 40px; }
ul { list-style: none; margin: 25px 0; padding: 0; }
li { display: table-cell; font-weight: bold; width: 1%; }
#error-suggestions { font-size: 14px; }
#next-steps { margin: 25px 0 50px 0;}
#next-steps li { display: block; width: 100%; text-align: center; padding: 5px 0; font-weight: normal; color: rgba(0, 0, 0, 0.5); }
#next-steps a { font-weight: bold; }
.divider { border-top: 1px solid #d5d5d5; border-bottom: 1px solid #fafafa;}
#parallax_wrapper {
position: relative;
z-index: 0;
}
#parallax_field {
overflow: hidden;
position: absolute;
left: 0;
top: 0;
height: 370px;
width: 100%;
}
etc etc.
Contenu de Github, mais pas le contenu du fichier. Ce que je fais mal?
Vous devriez vraiment utiliser
os.path.join()
de combiner des tracés. getcwd()
ne renvoie pas nécessairement à un nom de répertoire terminant par un séparateur de chemin.OriginalL'auteur Fomite | 2013-01-02
Vous devez vous connecter pour publier un commentaire.
Le contenu du fichier en question est inclus dans les données renvoyées. Vous obtenez toute la GitHub vue de ce fichier, et pas seulement le contenu.
Si vous voulez télécharger juste le fichier, vous devez utiliser le
Raw
lien en haut de la page, qui sera (pour l'exemple):Remarque le changement de nom de domaine, et le
blob/
une partie du chemin est allé.De démontrer cela avec la
requests
GitHub lui-même:pygit
- qui peut être plus utile/flexible pour l'OP de travailler avec des choses dans le futur)est plutôt faible niveau, cependant, n'est-ce pas?
Et résolu - merci aussi pour l'astuce sur la bonne façon d'aller sur le nom de fichier/dossier rejoindre. Accepter une fois l'expiration de la minuterie.
Err oui - il y en a un autre qui est mieux ou peut-être que je suis en train de réfléchir à ma maison", pygit"
si vous souhaitez accéder à un fichier dans un repository privé, l'authentification de base fonctionne très bien: les demandes.get('raw.github.com/myfile.txt', auth=('username', 'passwd'))
OriginalL'auteur Martijn Pieters
Vous avez besoin à la demande de la première version du fichier, à partir de
https://raw.github.com
.Voir la différence:
https://raw.github.com/django/django/master/setup.py vs https://github.com/django/django/blob/master/setup.py
Aussi, vous devriez probablement ajouter un
/
entre votre répertoire et le nom de fichier:OriginalL'auteur Burhan Khalid