保存・ダウンロード・アップロード|PC・ブラウザ・ファイルの基本

このページはプロモーション(広告)を含みます。

PC・ブラウザ・ファイルの基本(初級・読む20分+演習30分)

この授業のゴール

仕事でどう使うか

「保存した」という言葉は、仕事では保存先を言わないと意味がありません。分析結果をダウンロードして安心したのに、翌日に探すと別のフォルダにあった、という事故は日常的に起きます。

路線 この授業の使いどころ
DS(データサイエンティスト) 分析結果のCSVやグラフを書き出し、共有先へ渡す。どのフォルダのどの版を渡したかを説明できないと、後から数値が食い違う
ML(機械学習エンジニア) 学習済みモデルや評価結果のファイルサイズと転送時間を見積もる。MBとMbpsを取り違えると、見積もりが8倍ずれる
DX(DX推進・AI企画) 業務システムの「保存」「出力」「取込」機能の仕様を整理する。自動保存のある画面は、保存先と保存期間を要件に書く
RS(研究者) 実験データのバックアップと提出先へのアップロード。個人情報を含むファイルを外部サービスへ上げる前の確認が必要

この授業の目的は、「どこに」「どの方向で」「どの名前で」保存されたかを、1文で説明できるようにすることです。

前提

前提は 画面とブラウザの役割(ブラウザ内の記録とPCのファイルの区別)と ファイル・フォルダ・拡張子(ファイル名・フォルダ・原本の考え方)です。

操作の練習は、画面内のコードで行います。あなたのPCのフォルダは書き換えません。

身近な状況:「保存した」のはどこ?

Eさんは学習アプリで3つの操作をしました。

  1. ノート欄に文を入力した(画面に「保存済み」と出た)。
  2. 教材CSVの「ダウンロード」ボタンを押した。
  3. 手元のメモファイルを、提出用の画面に「アップロード」した。

Eさんは「3つとも保存した」と報告しましたが、同僚から「どこに?」と聞かれて答えに詰まりました。3つは、保存先がすべて別です。

操作 データの動き 保存先
自動保存(ノート) 画面 → ブラウザ ブラウザ内の記録
ダウンロード サーバー → 自分のPC PCのフォルダ(多くは「ダウンロード」)
アップロード 自分のPC → サーバー サーバー側(相手の管理する場所)

「保存した」と言うときは、何を、どこに、どの名前でを添えます。この3点が言えれば、探すときも、人に伝えるときも迷いません。

直感的な説明:荷物の流れで考える

ダウンロードとアップロードは、サーバー(倉庫)から見た荷物の向きで区別します。

どちらの向きでも、元のデータは消えず、コピーが作られるのが基本です。ただし、手元の棚で同じ名札のものがあれば、入れ替わって古い方は戻らないことがあります。この注意が、原本を残すという考え方につながります。

たとえの限界:自動保存は、手元の棚(PCのフォルダ)ではなく、窓口の内部メモ(ブラウザ内の記録)に入ります。棚に置いたことにはなりません。

正確な定義:保存先・サイズ・転送時間

ファイルの保存に関する語

語 意味
上書き保存 同じ場所・同じ名前のファイルを、新しい内容で置き換える。古い内容は戻らない
名前を付けて保存 場所と名前を選んで、別のファイルとして保存する
ダウンロード先 ダウンロードしたファイルが置かれるフォルダ。ブラウザの設定で変えられる
同名ファイル 同じ名前があると、多くのブラウザは ab_test (1).csv のように番号を付ける

サイズの単位:1 KB(キロバイト)=1,000 B、1 MB(メガバイト)=1,000 KB として説明します(OSによっては1,024を基準にして表示するため、数%の差が出ます。執筆時点の一般的な説明で、表示は環境で確認してください)。

回線速度の単位:通信速度はビット毎秒(bps)で表します。1 byte=8 bit なので、

$$ t = \frac{S \times 8}{v} $$

数値を代入します。$S=25$ MB、$v=100$ Mbps なら $t = 25 \times 8 \div 100 = 2$ 秒です。実際には通信の混み具合などで変わるので、理論上の下限の目安として使います。

実際の教材CSVのサイズを、Pythonの os.path.getsize(引数はパスの文字列、戻り値はバイト数の整数)で確認します。

import os
size = os.path.getsize("/data/ab_test.csv")
print(size, "bytes")
print(size / 1000, "KB")
with open("/data/ab_test.csv", encoding="utf-8") as f:
    lines = f.read().splitlines()
print(len(lines), "lines (ヘッダー1行を含む)")

出力は、73681 bytes、73.681 KB、4001 lines (ヘッダー1行を含む) です。データの行数は4000行(ヘッダーを除く)です。

段階付き例題:書き出して、読み直して、確かめる

問題:ノートの文を note.txt として書き出し、保存前後で中身とサイズが合うことを確かめる。

ステップ1:入力を決める。文は 購入率の分母は来店者 に改行を足したもの。

ステップ2:書き出す(処理)。write_text(text, encoding="utf-8") で保存する。引数は書き込む文字列と文字コードの名前で、戻り値は書いた文字数です。

ステップ3:読み直す(出力の検証)。read_text で読み、元の文と一致するかを比べる。

ステップ4:サイズを見る(出力)。日本語1文字は UTF-8 で通常3バイトなので、10文字なら30バイト、改行が1バイトで、合計31バイトのはずです。

import tempfile, pathlib, os
text = "購入率の分母は来店者\n"
f = pathlib.Path(tempfile.mkdtemp()) / "note.txt"
f.write_text(text, encoding="utf-8")
print(len(text), os.path.getsize(f))
print(f.read_text(encoding="utf-8") == text)

出力は 11 31 と True です。len(text) は文字数(改行を含め11)、getsize はバイト数(31)で、別の量です。

ステップ5:意味を言葉にする。「ノートの文を、note.txt(UTF-8、31バイト)として、作業フォルダに保存し、読み直して一致を確かめた」。保存先・名前・形式・サイズ・検証の5点が言えました。文字コードの詳細は 文字コードと安全なファイル確認 で扱います。

操作して理解する:同名ファイルと転送時間

(1) 同名ファイルの番号付け。同じ名前のファイルを2回ダウンロードすると、2回目は ab_test (1).csv になります。仕組みを小さな関数で確かめます。引数 existing は既にある名前のリスト、name は希望の名前で、戻り値は重ならない名前です。

from pathlib import PurePosixPath

def next_name(existing, name):
    if name not in existing:
        return name
    p = PurePosixPath(name)
    n = 1
    while f"{p.stem} ({n}){p.suffix}" in existing:
        n += 1
    return f"{p.stem} ({n}){p.suffix}"

have = ["ab_test.csv"]
print(next_name(have, "ab_test.csv"))
have.append("ab_test (1).csv")
print(next_name(have, "ab_test.csv"))
print(next_name(have, "memo.txt"))

出力は、ab_test (1).csv、ab_test (2).csv、memo.txt です。番号付きのファイルが増えると、どれが最新かが名前から分かりません。ダウンロードのたびに、古い方を削除するか、日付や版で名前を変える習慣が必要です。

(2) 実際の画面で試す(取込みは任意です):

  1. 教材のCSVをダウンロードし、ブラウザの「ダウンロード」の一覧を開く。
  2. ファイル名、サイズ、置かれたフォルダを読み取り、1文で言う(例:「ab_test.csv、約74KB、ダウンロードフォルダ」)。
  3. 同じファイルをもう一度ダウンロードし、名前に番号が付くか確かめる。

(3) 転送時間。理論値を計算して、MBとMbpsの取り違えを防ぎます。

size_mb = 25
speed_mbps = 100
print(size_mb * 8 / speed_mbps)
print(size_mb / speed_mbps)

出力は 2.0(正しい式)と 0.25(バイトとビットを混同した誤った式)です。8倍の差です。

発展:自動保存の種類と、アップロード前の確認

「自動保存」には、保存先の違う3種類があります。

種類 保存先 特徴
ブラウザ内の記録 自分のブラウザ 他の端末から見えない。サイトデータの削除で消える(画面とブラウザの役割)
サーバー保存 サービスの管理する場所 別の端末からも見える。運営側の保管ルールに従う
同期フォルダ PCのフォルダ+サーバー PCとサーバーで同じ内容を保つ。削除も同期される

同期フォルダは便利ですが、削除や上書きも同期されるので、バックアップの代わりにはなりません(エラー時の切り分けとバックアップ)。

アップロード前の確認:

サービスの容量上限、保存期間、料金などは、変わり得る情報です。執筆時点(2026年)の一般的な説明であり、最新は各サービスの公式情報や社内のルールで確認してください。この教材では、内蔵の架空データだけを使い、実在の顧客データをアップロードする練習は行いません。

よくある失敗

失敗1:ダウンロードを「ノートの保存」と取り違える

誤った報告:「教材CSVをダウンロードしたので、ノートは保存済みです。」

places = {
    "ノートの文": "ブラウザ内の記録",
    "ab_test.csv": "PCのダウンロードフォルダ",
}
claim = "ab_test.csv をダウンロードした → ノートも保存済み"
print(claim)
print("ノートの保存先:", places["ノートの文"])
print("CSVの保存先  :", places["ab_test.csv"])

出力は、主張の文と、ノートの保存先 ブラウザ内の記録、CSVの保存先 PCのダウンロードフォルダ です。保存先が違うので、一方の確認は、もう一方の確認になりません。

直し方:確認は対象ごとに行う。ノートは再読込で、CSVはダウンロードの一覧とフォルダで確かめる。報告は「何を、どこに」で書く。

失敗2:原本を編集して上書き保存し、元に戻せなくなる

誤った操作:ダウンロードした ab_test.csv(原本)を開き、行を消して上書き保存した。

import tempfile, pathlib
f = pathlib.Path(tempfile.mkdtemp()) / "ab_test.csv"
f.write_text("user_id,group\n1,A\n2,B\n", encoding="utf-8")
before = len(f.read_text(encoding="utf-8").splitlines()) - 1
f.write_text("user_id,group\n1,A\n", encoding="utf-8")   # 上書き
after = len(f.read_text(encoding="utf-8").splitlines()) - 1
print(before, after)

出力は 2 1 です。データ行が2行から1行に減り、元の行は戻りません。

直し方:編集を始める前に「名前を付けて保存」で ab_test_work.csv を作り、原本には触れない。元のファイルが読み取り専用になる設定があれば使う。

失敗3:MB と Mbps を同じ単位と考えて、時間を見誤る

誤った見積もり:「25MBのファイルを100Mbpsの回線で送る。25÷100=0.25秒で終わる。」

実際の理論値は $25 \times 8 \div 100 = 2$ 秒です。8倍の差があります。遅い回線、たとえば 8 Mbps なら $25 \times 8 \div 8 = 25$ 秒です。

for mbps in (100, 8):
    print(mbps, 25 * 8 / mbps)

出力は 100 2.0 と 8 25.0 です。直し方:バイト(MB)に8を掛けてビットにそろえてから、回線速度(Mbps)で割る。単位を式の中に書き、約分して残る単位が「秒」になることを確かめます。

まとめ

用語

ダウンロード(download)

サーバーにあるデータを自分のPCに受け取ってファイルとして置く操作。

アップロード(upload)

自分のPCのファイルをサーバーなど相手側へ送る操作。

上書き保存(overwrite save)

同じ場所・同じ名前のファイルを新しい内容で置き換える保存。古い内容は戻りにくい。

Mbps(megabits per second)

通信速度の単位。1秒に送れるメガビット数。8で割るとMB/秒になる。

同期フォルダ(synced folder)

PCのフォルダとサーバーの内容を同じに保つ仕組み。削除も同期される。

よくある質問

「保存」と「ダウンロード」は何が違うのですか?

ダウンロードは、サーバーにあるデータを自分のPCにファイルとして受け取る操作で、保存の一種です。「保存」には自動保存(ブラウザ内)、名前を付けて保存(PCのフォルダ)、サーバー保存など複数あり、保存先が違います。

ダウンロードしたファイルが見つかりません。どうすればよいですか?

ブラウザのダウンロード一覧を開き、ファイル名の横の「フォルダで表示」のような項目で場所を開きます。ブラウザの設定で、保存先フォルダと「毎回保存先を確認する」設定を確かめるのも有効です。

ファイルサイズが大きいとなぜ困るのですか?

転送に時間がかかり、メールや共有サービスには上限があるからです。また、ブラウザ内でPythonを動かすと、メモリ不足で動かなくなることもあります。必要な列や行だけに絞るのが基本です。

アップロードしたファイルは、もう取り戻せませんか?

手元のファイルは残るので、元のデータは失われません。ただし、送り先に置かれたコピーは、相手の管理下に入ります。個人情報を上げてしまった場合は、すぐに担当者に報告します。

名前を付けて保存と上書き保存は、どう使い分けますか?

原本や、他の人と共有しているファイルは、名前を付けて保存で別の名前にします。自分だけが使う作業用ファイルで、途中経過を残さなくてよい場合に、上書き保存を使います。迷ったら、名前を付けて保存です。

クラウドに自動保存されるなら、バックアップは不要ですか?

不要とは言えません。誤った編集や削除も同期されるからです。別の場所に、日付や版を付けたコピーを残すと、元に戻せる範囲が広がります(エラー時の切り分けとバックアップ)。

確認問題

問1 学習アプリのノート欄に入力して「保存済み」と出た。この保存先として最も適切なのはどれか。

  1. ① PCの「ダウンロード」フォルダのファイル
  2. ② ブラウザ内の記録
  3. ③ 必ず運営会社のサーバー
  4. ④ クリップボード
解答と解説

正解:②

この教材では、自動保存はブラウザ内の記録に入ります。ファイルとして取り出すには、別に書き出す操作が必要です。

問2 「ダウンロード」の説明として正しいのはどれか。

  1. ① 自分のPCのファイルをサーバーへ送る操作
  2. ② ファイルの拡張子を変える操作
  3. ③ ブラウザ内の記録を消す操作
  4. ④ サーバーのファイルを自分のPCにコピーする操作
解答と解説

正解:④

ダウンロードは、サーバーから自分のPCへデータを受け取り、ファイルとして置く操作です。サーバー側のデータは残ります。

問3 30 MB のファイルを、回線速度 60 Mbps で送る理論上の時間はどれか。

  1. ① 4秒
  2. ② 0.5秒
  3. ③ 30秒
  4. ④ 2秒
解答と解説

正解:①

$30 \times 8 \div 60 = 4$ 秒です。MBに8を掛けてビットにそろえます。

問4 原本のCSVを開いて編集し、同じ名前で上書き保存した。起きることとして正しいのはどれか。

  1. ① 原本は自動的に別の場所へバックアップされる
  2. ② 名前に自動で番号が付くので原本は残る
  3. ③ 元の内容は上書きされ、通常は元に戻せない
  4. ④ ブラウザ内の記録に原本が残る
解答と解説

正解:③

同じ場所・同じ名前の上書き保存は、古い内容を新しい内容で置き換えます。戻せるかは環境次第ですが、基本的には戻せないものとして扱います。

問5 同期フォルダに置いたファイルを誤って削除した。起こりやすいことはどれか。

  1. ① サーバー側のコピーは必ず残る
  2. ② 何も起こらない
  3. ③ ファイルが自動で再作成される
  4. ④ 削除もサーバー側に同期され、サーバーからも消えることがある
解答と解説

正解:④

同期は、PCとサーバーを同じ状態に保つ仕組みなので、削除も反映されます。ごみ箱の保存期間など、復旧できる場合もありますが、バックアップの代わりにはなりません。

問6 個人情報を含むCSVを、社外のファイル共有サービスにアップロードしたい。最初にすべきことはどれか。

  1. ① すぐにアップロードして、後で消す
  2. ② 社内の持ち出しルールと送り先を確認し、許可されているか確かめる
  3. ③ 拡張子を変えて中身を隠す
  4. ④ ファイル名を英数字に変える
解答と解説

正解:②

個人情報は、ルールに従って扱う必要があります。アップロードしてしまうと、削除しても取り戻せない場合があります。

次に学ぶこと

次は 文字コードと安全なファイル確認 で、ファイルの中身を読むときの文字コードと、開く前の安全確認を学びます。バックアップは エラー時の切り分けとバックアップ で扱います。

この授業の確認問題だけでモジュールの習得とはしません。ON01 の総合テストと、CSVを使った自力課題で判定します。

キャリア学習:データサイエンティスト・機械学習エンジニア・DX推進・研究者を目指す人の学習アプリ。164モジュール・984授業を、ブラウザで動くSQLとPythonの演習で。基礎と各分野の最初のモジュールは無料。全部は2,980円の買い切り。

アプリを無料で開く有料版と無料版の違い