Python Tips

Download

  • 1. from GoogleDrive
  • 2. from GitHub
  • 3. from WWW server
  • </ul> </div>

1. GoogleDrive からダウンロードを行う。

GoogleDrive 上のファイルは https://drive.google.com/... のような URL で表される。

このURL に対して wget を行うと、ファイルサイズが大きい場合にウィルススキャン警告画面が表示されてうまくダウンロードできないことがある。そのような場合は gdown を使う。

下の例では、Google Drive 上のファイル名は CycleGAN.py である。

In [1]:
GOOGLEDRIVE_URL = 'https://drive.google.com/uc?id=1aNvpPDNeDWYQFu_PA1kOtFlzcO5seHky'
FILENAME = 'CycleGAN.py'

1.1 gdown コマンドを使って GoogleDrive からダウンロードする

In [2]:
# download するファイルの古い版があれば消去しておく
! rm -f {FILENAME}
In [3]:
# download from GoogleDrive
! gdown {GOOGLEDRIVE_URL}
Downloading...
From (original): https://drive.google.com/uc?id=1aNvpPDNeDWYQFu_PA1kOtFlzcO5seHky
From (redirected): https://drive.google.com/uc?id=1aNvpPDNeDWYQFu_PA1kOtFlzcO5seHky&confirm=t&uuid=d60e999d-2318-460b-9da2-02efc313fdd1
To: /content/CycleGAN.py
100% 24.6k/24.6k [00:00<00:00, 56.3MB/s]
In [4]:
# download したファイルを確認する
! ls -l {FILENAME}
-rw-r--r-- 1 root root 24605 Nov 29  2021 CycleGAN.py
In [5]:
# 次の実験のため download したファイルを消去しておく
! rm -f {FILENAME}

1.2 python の gdown ライブラリ を使って GoogleDrive からダウンロードする。

In [6]:
# download するファイルの古い版があれば消去しておく
! rm -f {FILENAME}
In [7]:
# install gdown libray
! pip install gdown
Requirement already satisfied: gdown in /usr/local/lib/python3.11/dist-packages (5.2.0)
Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.11/dist-packages (from gdown) (4.12.3)
Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from gdown) (3.16.1)
Requirement already satisfied: requests[socks] in /usr/local/lib/python3.11/dist-packages (from gdown) (2.32.3)
Requirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages (from gdown) (4.67.1)
Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.11/dist-packages (from beautifulsoup4->gdown) (2.6)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests[socks]->gdown) (3.4.1)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests[socks]->gdown) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests[socks]->gdown) (2.3.0)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests[socks]->gdown) (2024.12.14)
Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in /usr/local/lib/python3.11/dist-packages (from requests[socks]->gdown) (1.7.1)
In [8]:
import gdown

def gdown_download(url, filename):
    try:
        gdown.download(url, filename, quiet=False)
    except Exception as e:
        print(f'Error {e}')
In [9]:
gdown_download(GOOGLEDRIVE_URL, FILENAME)
Downloading...
From (original): https://drive.google.com/uc?id=1aNvpPDNeDWYQFu_PA1kOtFlzcO5seHky
From (redirected): https://drive.google.com/uc?id=1aNvpPDNeDWYQFu_PA1kOtFlzcO5seHky&confirm=t&uuid=b0b43bd7-6075-4531-b486-f215684dbf87
To: /content/CycleGAN.py
100%|██████████| 24.6k/24.6k [00:00<00:00, 31.9MB/s]
In [10]:
! ls -l {FILENAME}
-rw-r--r-- 1 root root 24605 Nov 29  2021 CycleGAN.py
In [11]:
# 次の実験のため download したファイルを消去しておく
! rm -f {FILENAME}

2. GitHub からダウンロードする

2.1 git コマンドを利用して git clone する

In [12]:
GITHUB_REPO_PREFIX = 'https://github.com/YoshihisaNitta/GoogleColab'
GITHUB_URL = f'{GITHUB_REPO_PREFIX}.git'
GITHUB_FILE_URL = f'{GITHUB_REPO_PREFIX}/blob/main/models/CycleGAN.py'
In [13]:
# download するファイルの古い版があれば消去しておく
! rm -rf GoogleColab
In [14]:
# git clone コマンドを実行する
! git clone {GITHUB_URL}
Cloning into 'GoogleColab'...
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 16 (delta 5), reused 16 (delta 5), pack-reused 0 (from 0)
Receiving objects: 100% (16/16), 23.11 KiB | 11.55 MiB/s, done.
Resolving deltas: 100% (5/5), done.
In [15]:
! ls -lR GoogleColab
GoogleColab:
total 12
-rw-r--r-- 1 root root 1072 Jan 18 23:27 LICENSE
drwxr-xr-x 2 root root 4096 Jan 18 23:27 models
-rw-r--r-- 1 root root   37 Jan 18 23:27 README.md

GoogleColab/models:
total 168
-rw-r--r-- 1 root root 13889 Jan 18 23:27 AutoEncoder.py
-rw-r--r-- 1 root root 24605 Jan 18 23:27 CycleGAN.py
-rw-r--r-- 1 root root 15941 Jan 18 23:27 GAN.py
-rw-r--r-- 1 root root 24077 Jan 18 23:27 LSTMMusic.py
-rw-r--r-- 1 root root 26767 Jan 18 23:27 RecycleGAN.py
-rw-r--r-- 1 root root 18714 Jan 18 23:27 VariationalAutoEncoder.py
-rw-r--r-- 1 root root 19714 Jan 18 23:27 WGANGP.py
-rw-r--r-- 1 root root 15880 Jan 18 23:27 WGAN.py
In [16]:
# 次の実験ため download したファイルを消去しておく
! rm -rf GoogleColab

2.2 python の GitPython ライブラリを利用して git clone する。

In [17]:
# download するファイルの古い版があれば消去しておく
! rm -rf GoogleColab
In [18]:
# GitPython ライブラリをインストールする
! pip install gitpython
Requirement already satisfied: gitpython in /usr/local/lib/python3.11/dist-packages (3.1.44)
Requirement already satisfied: gitdb<5,>=4.0.1 in /usr/local/lib/python3.11/dist-packages (from gitpython) (4.0.12)
Requirement already satisfied: smmap<6,>=3.0.1 in /usr/local/lib/python3.11/dist-packages (from gitdb<5,>=4.0.1->gitpython) (5.0.2)
In [19]:
# python の関数を定義する
from git import Repo

def git_clone(repo_url, dest_dir):
    try:
        Repo.clone_from(repo_url, dest_dir)
    except Exception as e:
        print(f'Error {e}')
In [20]:
# Python の関数で git clone を行う。
git_clone(GITHUB_URL, 'GoogleColab')
In [21]:
! ls -lR GoogleColab
GoogleColab:
total 12
-rw-r--r-- 1 root root 1072 Jan 18 23:27 LICENSE
drwxr-xr-x 2 root root 4096 Jan 18 23:27 models
-rw-r--r-- 1 root root   37 Jan 18 23:27 README.md

GoogleColab/models:
total 168
-rw-r--r-- 1 root root 13889 Jan 18 23:27 AutoEncoder.py
-rw-r--r-- 1 root root 24605 Jan 18 23:27 CycleGAN.py
-rw-r--r-- 1 root root 15941 Jan 18 23:27 GAN.py
-rw-r--r-- 1 root root 24077 Jan 18 23:27 LSTMMusic.py
-rw-r--r-- 1 root root 26767 Jan 18 23:27 RecycleGAN.py
-rw-r--r-- 1 root root 18714 Jan 18 23:27 VariationalAutoEncoder.py
-rw-r--r-- 1 root root 19714 Jan 18 23:27 WGANGP.py
-rw-r--r-- 1 root root 15880 Jan 18 23:27 WGAN.py
In [22]:
# 次の実験のため download したファイルを消去しておく
! rm -rf GoogleColab

2.3 Python の git ライブラリ dulwich を利用して git を操作する

In [23]:
# download するファイルの古い版があれば消去しておく
! rm -rf GoogleColab
In [24]:
# dulwich ライブラリをインストールする
! pip install dulwich
Collecting dulwich
  Downloading dulwich-0.22.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.4 kB)
Requirement already satisfied: urllib3>=1.25 in /usr/local/lib/python3.11/dist-packages (from dulwich) (2.3.0)
Downloading dulwich-0.22.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (979 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 979.7/979.7 kB 11.9 MB/s eta 0:00:00
Installing collected packages: dulwich
Successfully installed dulwich-0.22.7
In [25]:
# python の関数を定義する。
from dulwich import porcelain

def git_clone(repo_url, dest_dir):
    try:
        # dulwichのporcelain APIを使用してリポジトリをクローン
        porcelain.clone(repo_url, dest_dir)
        print(f"Repository cloned successfully to {dest_dir}")
    except Exception as e:
        print(f"Error cloning repository: {e}")
In [26]:
git_clone(GITHUB_URL, 'GoogleColab')
Repository cloned successfully to GoogleColab
In [27]:
! ls -lR GoogleColab
GoogleColab:
total 12
-rw-r--r-- 1 root root 1072 Jan 18 23:27 LICENSE
drwxr-xr-x 2 root root 4096 Jan 18 23:27 models
-rw-r--r-- 1 root root   37 Jan 18 23:27 README.md

GoogleColab/models:
total 168
-rw-r--r-- 1 root root 13889 Jan 18 23:27 AutoEncoder.py
-rw-r--r-- 1 root root 24605 Jan 18 23:27 CycleGAN.py
-rw-r--r-- 1 root root 15941 Jan 18 23:27 GAN.py
-rw-r--r-- 1 root root 24077 Jan 18 23:27 LSTMMusic.py
-rw-r--r-- 1 root root 26767 Jan 18 23:27 RecycleGAN.py
-rw-r--r-- 1 root root 18714 Jan 18 23:27 VariationalAutoEncoder.py
-rw-r--r-- 1 root root 19714 Jan 18 23:27 WGANGP.py
-rw-r--r-- 1 root root 15880 Jan 18 23:27 WGAN.py
In [28]:
# 次の実験のため download したファイルを消去しておく
! rm -rf GoogleColab

2.4 python で Requests パッケージを利用してレポジトリをダウンロードする。

In [29]:
# download するファイルの古い版があれば消去しておく
! rm -rf GoogleColab
In [30]:
# requests ライブラリをインストールする
! pip install requests
Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (2.32.3)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests) (3.4.1)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests) (2.3.0)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests) (2024.12.14)
In [31]:
import requests
import zipfile
import io

def download_repo_as_zip(repo_url, dest_dir):
    # GitHubリポジトリのZIPダウンロードURLを構築
    zip_url = repo_url.rstrip('/') + "/archive/refs/heads/main.zip"
    try:
        response = requests.get(zip_url)
        response.raise_for_status()  # HTTPエラーチェック

        # ZIPファイルをメモリ上で展開
        with zipfile.ZipFile(io.BytesIO(response.content)) as zip_ref:
            zip_ref.extractall(dest_dir)

        print(f"Repository downloaded and extracted to {dest_dir}")
    except Exception as e:
        print(f"Error downloading repository: {e}")
In [32]:
download_repo_as_zip(GITHUB_REPO_PREFIX, 'GoogleColab')
Repository downloaded and extracted to GoogleColab
In [33]:
! ls -lR GoogleColab
GoogleColab:
total 4
drwxr-xr-x 3 root root 4096 Jan 18 23:27 GoogleColab-main

GoogleColab/GoogleColab-main:
total 12
-rw-r--r-- 1 root root 1072 Jan 18 23:27 LICENSE
drwxr-xr-x 2 root root 4096 Jan 18 23:27 models
-rw-r--r-- 1 root root   37 Jan 18 23:27 README.md

GoogleColab/GoogleColab-main/models:
total 168
-rw-r--r-- 1 root root 13889 Jan 18 23:27 AutoEncoder.py
-rw-r--r-- 1 root root 24605 Jan 18 23:27 CycleGAN.py
-rw-r--r-- 1 root root 15941 Jan 18 23:27 GAN.py
-rw-r--r-- 1 root root 24077 Jan 18 23:27 LSTMMusic.py
-rw-r--r-- 1 root root 26767 Jan 18 23:27 RecycleGAN.py
-rw-r--r-- 1 root root 18714 Jan 18 23:27 VariationalAutoEncoder.py
-rw-r--r-- 1 root root 19714 Jan 18 23:27 WGANGP.py
-rw-r--r-- 1 root root 15880 Jan 18 23:27 WGAN.py
In [34]:
# 次の実験のため download したファイルを消去しておく
! rm -rf GoogleColab

3. Websサイトからファイルをダウンロードする。

In [35]:
WGET_PREFIX = 'https://nw.tsuda.ac.jp/lec/GoogleColab/pub'
WGET_URL = f'{WGET_PREFIX}/models/CycleGAN.py'

TARGET_DIR = './nw'

3.1 wget コマンドを利用して Web サイトからダウンロードする

In [36]:
# download するファイルの古い版があれば消去しておく
! rm -rf {TARGET_DIR}
In [37]:
# Download folder
! mkdir -p {TARGET_DIR}
! wget -nd {WGET_URL} -P {TARGET_DIR}
--2025-01-18 23:27:35--  https://nw.tsuda.ac.jp/lec/GoogleColab/pub/models/CycleGAN.py
Resolving nw.tsuda.ac.jp (nw.tsuda.ac.jp)... 133.99.41.193
Connecting to nw.tsuda.ac.jp (nw.tsuda.ac.jp)|133.99.41.193|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 24605 (24K)
Saving to: ‘./nw/CycleGAN.py’

CycleGAN.py         100%[===================>]  24.03K   149KB/s    in 0.2s    

2025-01-18 23:27:36 (149 KB/s) - ‘./nw/CycleGAN.py’ saved [24605/24605]

In [38]:
! ls -l {TARGET_DIR}
total 28
-rw-r--r-- 1 root root 24605 Nov 29  2021 CycleGAN.py
In [39]:
# 次の実験のため download したファイルを消去しておく
! rm -rf {TARGET_DIR}

3.2 python の Requests ライブラリを利用して Web サイトからダウンロードする。

In [40]:
# download するファイルの古い版があれば消去しておく
! rm -rf {TARGET_DIR}
In [41]:
# requests ライブラリをインストールする
! pip install requests
Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (2.32.3)
Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests) (3.4.1)
Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests) (2.3.0)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests) (2024.12.14)
In [42]:
import requests
import os

def download_file(url, dest_dir):
    # url からファイル名を取得する
    filename = url.split("/")[-1]
    local_path = os.path.join(dest_dir, filename)
    try:
        response = requests.get(url, stream=True)
        response.raise_for_status()  # HTTPエラーチェック

        # ディレクトリが存在しなければ作成する
        os.makedirs(dest_dir, exist_ok=True)

        # 保存する
        with open(local_path, "wb") as file:
            for chunk in response.iter_content(chunk_size=8192):
                file.write(chunk)
    except Exception as e:
        print(f"Error : {e}")
In [43]:
download_file(WGET_URL, TARGET_DIR)
In [44]:
! ls -l {TARGET_DIR}
total 28
-rw-r--r-- 1 root root 24605 Jan 18 23:27 CycleGAN.py
In [45]:
# 次の実験のため download したファイルを消去しておく
! rm -rf {TARGET_DIR}
In [45]: