<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ファイル操作  |  Python-memo｜自動化・AI・Web開発の実験室</title>
	<atom:link href="https://python.cbagames.jp/tag/%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e6%93%8d%e4%bd%9c/feed/" rel="self" type="application/rss+xml" />
	<link>https://python.cbagames.jp</link>
	<description>Pythonで、できるをふやそう。</description>
	<lastBuildDate>Mon, 02 Feb 2026 05:59:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://python.cbagames.jp/wp-content/uploads/2025/06/cropped-497d491d54402de785c9e043bfa0620a-32x32.png</url>
	<title>ファイル操作  |  Python-memo｜自動化・AI・Web開発の実験室</title>
	<link>https://python.cbagames.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Pythonで失敗しないファイル操作設計｜pathlib時代の読み書き・削除・バックアップ入門</title>
		<link>https://python.cbagames.jp/2026/01/10/python-file-operation-design/</link>
					<comments>https://python.cbagames.jp/2026/01/10/python-file-operation-design/#respond</comments>
		
		<dc:creator><![CDATA[asukapy]]></dc:creator>
		<pubDate>Sat, 10 Jan 2026 07:05:15 +0000</pubDate>
				<category><![CDATA[自動化スクリプト]]></category>
		<category><![CDATA[os]]></category>
		<category><![CDATA[pathlib]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[shutil]]></category>
		<category><![CDATA[バックアップ設計]]></category>
		<category><![CDATA[ファイル操作]]></category>
		<category><![CDATA[標準ライブラリ]]></category>
		<guid isPermaLink="false">https://python.cbagames.jp/?p=770</guid>

					<description><![CDATA[Pythonでファイル操作を書くとき、「とりあえず open() して読めたからOK」「os と shutil を雰囲気で使っている」そんな状態になっていませんか？ ファイルの読み書き・削除・バックアップは、一見シンプル [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Pythonでファイル操作を書くとき、<br>「とりあえず <code>open()</code> して読めたからOK」<br>「<code>os</code> と <code>shutil</code> を雰囲気で使っている」<br>そんな状態になっていませんか？</p>



<p>ファイルの読み書き・削除・バックアップは、<br><strong>一見シンプルなのに、事故が起きやすい処理</strong>です。</p>



<ul class="wp-block-list">
<li>うっかり上書きしてデータが消えた</li>



<li>文字コードの違いで本番だけエラーになる</li>



<li>例外が起きてファイルが閉じられないまま残る</li>
</ul>



<p>こうしたトラブルの多くは、<br><strong>文法の問題ではなく「設計」の問題</strong>なんですよね。</p>



<p>Pythonには <code>os</code>、<code>shutil</code>、<code>pathlib</code> など、<br>ファイル操作のための標準ライブラリがいくつも用意されています。 特に Python 3.4 以降で導入された <code>pathlib</code> は、<br>パスをオブジェクトとして扱えるため、<br>安全で読みやすい設計をしやすくなりました。</p>



<p>この記事では、<br><strong>「動くコード」ではなく「壊れにくいファイル操作設計」</strong>をテーマに、</p>



<ul class="wp-block-list">
<li>安全な読み書きの考え方</li>



<li>削除・バックアップで事故を防ぐ設計</li>



<li>標準ライブラリだけでできる実務レベルの実装</li>
</ul>



<p>を、できるだけ分かりやすく整理していきます。</p>



<p>初心者の方には「なぜそう書くのか」が腑に落ちるように、<br>中級者以上の方には「設計を見直すヒント」になるように、<br>やさしく丁寧に解説していきますね 😊</p>



<p>それではまず、<br><strong>Pythonのファイル操作がなぜ設計で差がつくのか</strong>から見ていきましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2"><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">論点・背景：Pythonのファイル操作はなぜ「設計」で差がつくのか</a></li><li><a href="#toc2" tabindex="0">基本設計：安全なファイル操作の原則</a><ol><li><a href="#toc3" tabindex="0">① コンテキストマネージャ（with文）は必須</a></li><li><a href="#toc4" tabindex="0">② エンコーディングは必ず明示する</a></li><li><a href="#toc5" tabindex="0">③ ファイル操作は「失敗する前提」で書く</a></li></ol></li><li><a href="#toc6" tabindex="0">手順①：ファイルの読み書きとデータ保存</a><ol><li><a href="#toc7" tabindex="0">① ファイルを開くときに考えるべきこと</a></li><li><a href="#toc8" tabindex="0">② 読み込み処理の基本パターン</a></li><li><a href="#toc9" tabindex="0">③ 書き込み処理の基本パターン</a></li><li><a href="#toc10" tabindex="0">④ 構造化データの保存はJSONを使う</a></li></ol></li><li><a href="#toc11" tabindex="0">手順②：ディレクトリ管理と検索</a><ol><li><a href="#toc12" tabindex="0">① ディレクトリを作成する</a></li><li><a href="#toc13" tabindex="0">② ディレクトリ内の一覧を取得する</a></li><li><a href="#toc14" tabindex="0">③ パターンマッチング（glob）で検索する</a></li><li><a href="#toc15" tabindex="0">④ os系APIとの付き合い方</a></li></ol></li><li><a href="#toc16" tabindex="0">手順③：バックアップとアーカイブ操作</a><ol><li><a href="#toc17" tabindex="0">① コピーと移動は役割を理解して使う</a></li><li><a href="#toc18" tabindex="0">② バックアップ設計の基本パターン</a></li><li><a href="#toc19" tabindex="0">③ アーカイブ（ZIP / TAR）を作成する</a></li><li><a href="#toc20" tabindex="0">④ バックアップは「設計」で決まる</a></li></ol></li><li><a href="#toc21" tabindex="0">手順④：削除と後処理（事故を防ぐ設計）</a><ol><li><a href="#toc22" tabindex="0">① ファイル削除とディレクトリ削除の違い</a></li><li><a href="#toc23" tabindex="0">② 削除前に必ずやるべきチェック</a></li><li><a href="#toc24" tabindex="0">③ 「論理削除」という考え方</a></li><li><a href="#toc25" tabindex="0">④ 後処理とログの重要性</a></li></ol></li><li><a href="#toc26" tabindex="0">補足：効率的で安全な設計のためのTips</a><ol><li><a href="#toc27" tabindex="0">① 一時ファイル・一時ディレクトリを活用する</a></li><li><a href="#toc28" tabindex="0">② ファイルのメタデータを活用する</a></li><li><a href="#toc29" tabindex="0">③ ファイル操作はロジックと分離する</a></li></ol></li><li><a href="#toc30" tabindex="0">まとめ</a><ol><li><a href="#toc31" tabindex="0">あわせて読みたい</a></li><li><a href="#toc32" tabindex="0">参考文献</a></li></ol></li><li><a href="#toc33" tabindex="0">よくある質問（Q&amp;A）</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">論点・背景：Pythonのファイル操作はなぜ「設計」で差がつくのか</span></h2>



<p>Pythonのファイル操作は、<br>サンプルコードを見るととても簡単に書けるように見えます。</p>



<pre class="wp-block-code"><code>with open("sample.txt", "r") as f:
    data = f.read()
</code></pre>



<p>でも実務や少し大きなスクリプトになると、<br>「思ったより難しい…」と感じる場面が一気に増えてきます。</p>



<ul class="wp-block-list">
<li>ファイルが存在しなかったらどうする？</li>



<li>途中で例外が起きたら中途半端な状態にならない？</li>



<li>WindowsとMacで同じように動く？</li>



<li>削除や上書きをしても本当に安全？</li>
</ul>



<p>こうした悩みは、<br><strong>Pythonの文法を知らないから起きるわけではありません。</strong><br>多くの場合、<strong>ファイル操作を「処理」としてだけ見ている</strong>ことが原因です。</p>



<p>ファイル操作は、プログラムの中では<br><strong>I/O（外部とのやり取り）</strong>にあたります。</p>



<p>I/Oには次のような特徴があります。</p>



<ul class="wp-block-list">
<li>失敗する可能性が常にある</li>



<li>環境（OS・権限・文字コード）に影響されやすい</li>



<li>一度壊すと取り返しがつかないことがある</li>
</ul>



<p>つまりファイル操作は、<br><strong>「成功する前提」で書く処理ではない</strong>んですね。</p>



<p>さらにPythonには、<br><code>os</code>、<code>os.path</code>、<code>shutil</code>、<code>pathlib</code> など、<br>似た役割を持つライブラリが複数存在します。</p>



<p>その結果、</p>



<ul class="wp-block-list">
<li>場所によって書き方がバラバラになる</li>



<li>文字列パスとPathオブジェクトが混在する</li>



<li>「どれを使うのが正解か」分からなくなる</li>
</ul>



<p>という状態に陥りやすくなります。</p>



<p>そこで重要になるのが、<br><strong>「どのライブラリを、どんな役割で使うか」を先に決める設計</strong>です。</p>



<p>この記事では、</p>



<ul class="wp-block-list">
<li>パス操作は <code>pathlib</code> を軸に考える</li>



<li>コピー・移動・アーカイブは <code>shutil</code> に任せる</li>



<li>ファイル操作は必ず失敗する前提で設計する</li>
</ul>



<p>という考え方をベースに話を進めていきます。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>まずは次の章で、<br><strong>安全なファイル操作を書くための基本設計ルール</strong>を整理していきましょう。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc2">基本設計：安全なファイル操作の原則</span></h2>



<p>ファイル操作で一番大切なのは、<br><strong>「必ず成功する」と思い込まないこと</strong>です。</p>



<p>ファイルは、</p>



<ul class="wp-block-list">
<li>存在しないかもしれない</li>



<li>途中で削除されるかもしれない</li>



<li>権限が足りないかもしれない</li>



<li>文字コードが想定と違うかもしれない</li>
</ul>



<p>こんな不確実な前提の上にあるので、<br><strong>設計段階で“失敗しても壊れない形”を作る</strong>必要があります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc3">① コンテキストマネージャ（with文）は必須</span></h3>



<p>Pythonでファイルを扱うなら、<br><code>with open(...)</code> は<strong>書き方の好みではなく設計ルール</strong>です。</p>



<pre class="wp-block-code"><code>with open("data.txt", "r", encoding="utf-8") as f:
    text = f.read()
</code></pre>



<p>この書き方をすると、</p>



<ul class="wp-block-list">
<li>処理が正常終了した場合</li>



<li>途中で例外が発生した場合</li>
</ul>



<p><strong>どちらでも確実にファイルが閉じられます。</strong></p>



<p>逆に <code>f.close()</code> を手動で書く設計は、<br>例外が起きた瞬間に<strong>リソースリーク</strong>を引き起こします。</p>



<p>「閉じ忘れを防ぐ」というより、<br><strong>閉じる責任を人間からPythonに渡す</strong>感覚ですね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc4">② エンコーディングは必ず明示する</span></h3>



<p>テキストファイルを開くときは、<br><code>encoding="utf-8"</code> を必ず指定しましょう。</p>



<pre class="wp-block-code"><code>with open("log.txt", "w", encoding="utf-8") as f:
    f.write("ログ出力")
</code></pre>



<p>エンコーディングを省略すると、</p>



<ul class="wp-block-list">
<li>Windowsでは cp932</li>



<li>Mac / Linuxでは utf-8</li>
</ul>



<p>のように、<br><strong>環境ごとに挙動が変わる可能性</strong>があります。</p>



<p>「自分のPCでは動くのに本番で落ちる」<br>この手のトラブル、かなり多いです…。</p>



<p>設計としては、</p>



<ul class="wp-block-list">
<li>テキスト → UTF-8で統一</li>



<li>バイナリ → <code>rb</code> / <code>wb</code> を使う</li>
</ul>



<p>と決め打ちしてしまうのが一番安全です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc5">③ ファイル操作は「失敗する前提」で書く</span></h3>



<p>安全なファイル操作では、<br><strong>例外処理はオマケではありません。</strong></p>



<p>たとえば、</p>



<ul class="wp-block-list">
<li>読み込み前に存在チェックをする</li>



<li>上書き前にバックアップを取る</li>



<li>削除前に対象をログに残す</li>
</ul>



<p>といった一手間が、<br>事故を未然に防いでくれます。</p>



<p>このあたりは後半の章で、<br>削除・バックアップ設計とあわせて詳しく見ていきますね。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次は、<br><strong>実際のコードを通して「ファイルの読み書きとデータ保存」</strong>を整理していきましょう。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc6">手順①：ファイルの読み書きとデータ保存</span></h2>



<p>ここからは、<br><strong>実際によく使うファイル操作を、設計の視点で整理</strong>していきます。</p>



<p>まずは一番基本になる、<br><strong>ファイルの読み書き</strong>からです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">① ファイルを開くときに考えるべきこと</span></h3>



<p><code>open()</code> にはモード指定がありますが、<br>「何となく使う」のは危険です。</p>



<ul class="wp-block-list">
<li><code>"r"</code>：読み込み専用（存在しないとエラー）</li>



<li><code>"w"</code>：書き込み専用（既存ファイルは<strong>上書き</strong>）</li>



<li><code>"a"</code>：追記（末尾に追加）</li>



<li><code>"b"</code>：バイナリモード</li>
</ul>



<p>特に注意したいのが <code>"w"</code> モードです。</p>



<p><strong>ファイルが存在すると、中身は即座に消えます。</strong><br>この仕様を理解せずに使うと、簡単に事故が起きます。</p>



<p>設計としては、</p>



<ul class="wp-block-list">
<li>既存ファイルを消したくない → <code>"a"</code> や存在チェック</li>



<li>本当に上書きしたい → バックアップを取ってから <code>"w"</code></li>
</ul>



<p>という判断を、<br><strong>コードを書く前に決めておく</strong>のが大切です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc8">② 読み込み処理の基本パターン</span></h3>



<p>ファイルの読み込みは、用途によって使い分けます。</p>



<pre class="wp-block-code"><code>with open("data.txt", "r", encoding="utf-8") as f:
    text = f.read()
</code></pre>



<p>小さなファイルなら <code>read()</code> で問題ありませんが、<br>サイズが大きい場合は注意が必要です。</p>



<p>1行ずつ処理したいときは、</p>



<pre class="wp-block-code"><code>with open("data.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())
</code></pre>



<p>この書き方なら、<br><strong>メモリを無駄に使わずに処理</strong>できます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc9">③ 書き込み処理の基本パターン</span></h3>



<p>書き込みも同様に、<br><strong>「どこに、どんな影響が出るか」</strong>を意識します。</p>



<pre class="wp-block-code"><code>with open("output.txt", "w", encoding="utf-8") as f:
    f.write("結果を書き込む")
</code></pre>



<p>この1行でも、</p>



<ul class="wp-block-list">
<li>既存ファイルは消える</li>



<li>例外が起きたら途中までの内容になる可能性がある</li>
</ul>



<p>というリスクがあります。</p>



<p>実務では、</p>



<ul class="wp-block-list">
<li>一時ファイルに書く</li>



<li>最後に置き換える</li>
</ul>



<p>といった設計がよく使われます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc10">④ 構造化データの保存はJSONを使う</span></h3>



<p>数値・リスト・辞書など、<br><strong>構造を持ったデータ</strong>を保存したい場合は、 JSON形式がとても便利です。</p>



<pre class="wp-block-code"><code>import json

data = {
    "name": "sample",
    "count": 3
}

with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)
</code></pre>



<p><code>ensure_ascii=False</code> を指定すると、<br>日本語がそのまま保存されます。</p>



<p>読み込むときは、</p>



<pre class="wp-block-code"><code>with open("data.json", "r", encoding="utf-8") as f:
    data = json.load(f)
</code></pre>



<p>これだけで、<br><strong>元のPythonオブジェクトが復元</strong>されます。</p>



<p>設定ファイルや中間データ保存では、<br>「とりあえずJSON」が安全な選択になることが多いです。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-none">

<a target="_blank" href="https://python.cbagames.jp/2025/12/17/python-config-file-design-guide/" title="Pythonの設定ファイル設計ガイド｜YAML/TOML/ENVの使い分けと安全な管理術" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-1-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-1-160x90.jpg 160w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-1-300x169.jpg 300w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-1-1024x576.jpg 1024w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-1-768x432.jpg 768w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-1-120x68.jpg 120w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-1-320x180.jpg 320w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-1-376x212.jpg 376w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-1.jpg 1280w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの設定ファイル設計ガイド｜YAML/TOML/ENVの使い分けと安全な管理術</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonの設定ファイル設計を「形式の選び方（INI/JSON/YAML/TOML/ENV）」「環境変数と.envの扱い」「Pydantic Settingsでの型安全な管理」「srcレイアウトやpyproject.tomlを含むプロジェクト構成」まで一気に整理。機密情報を安全に運用するための実践ルールも具体例付きで解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://python.cbagames.jp" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">python.cbagames.jp</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.12.17</div></div></div></div></a>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次は、<br><strong>ディレクトリの作成・検索・一覧取得</strong>について見ていきましょう。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc11">手順②：ディレクトリ管理と検索</span></h2>



<p>ファイル操作に慣れてくると、<br>次に必ず出てくるのが<strong>ディレクトリの扱い</strong>です。</p>



<p>「フォルダがなければ作る」<br>「特定のファイルをまとめて処理する」<br>こうした場面はとても多いですよね。</p>



<p>ここでは、<br><strong>pathlibを軸にした安全で読みやすい設計</strong>を見ていきます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc12">① ディレクトリを作成する</span></h3>



<p>ディレクトリ作成には、<br><code>Path.mkdir()</code> を使うのがおすすめです。</p>



<pre class="wp-block-code"><code>from pathlib import Path

dir_path = Path("data")

dir_path.mkdir()
</code></pre>



<p>ただし、このままだと<br><strong>すでに存在している場合にエラー</strong>になります。</p>



<p>実務では次の指定をセットで使うことが多いです。</p>



<pre class="wp-block-code"><code>dir_path.mkdir(parents=True, exist_ok=True)
</code></pre>



<ul class="wp-block-list">
<li><code>parents=True</code>：中間ディレクトリもまとめて作成</li>



<li><code>exist_ok=True</code>：すでに存在してもエラーにしない</li>
</ul>



<p>この2つを指定しておくと、<br><strong>何度実行しても安全なコード</strong>になります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc13">② ディレクトリ内の一覧を取得する</span></h3>



<p>フォルダの中身を取得したい場合は、<br><code>Path.iterdir()</code> を使います。</p>



<pre class="wp-block-code"><code>for path in dir_path.iterdir():
    print(path)
</code></pre>



<p><code>iterdir()</code> はイテレータを返すため、<br><strong>ファイル数が多くてもメモリ効率が良い</strong>のが特徴です。</p>



<p>ファイルかディレクトリかを判定することもできます。</p>



<pre class="wp-block-code"><code>for path in dir_path.iterdir():
    if path.is_file():
        print("file:", path.name)
    elif path.is_dir():
        print("dir:", path.name)
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc14">③ パターンマッチング（glob）で検索する</span></h3>



<p>特定の拡張子だけを処理したい場合は、<br><code>glob()</code> が便利です。</p>



<pre class="wp-block-code"><code>for path in dir_path.glob("*.txt"):
    print(path)
</code></pre>



<p>さらに、<br>サブディレクトリも含めて検索したい場合は、</p>



<pre class="wp-block-code"><code>for path in dir_path.glob("**/*.txt"):
    print(path)
</code></pre>



<p><code>**</code> を使うことで、<br><strong>再帰的な検索</strong>ができます。</p>



<p>大量ファイルを扱う場合でも、<br><code>glob()</code> は必要なものだけを順に返してくれるため、 安全な設計がしやすいです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc15">④ os系APIとの付き合い方</span></h3>



<p><code>os.listdir()</code> や <code>os.scandir()</code> も使えますが、<br>パスが文字列になるため、</p>



<ul class="wp-block-list">
<li>結合ミスが起きやすい</li>



<li>可読性が下がりやすい</li>
</ul>



<p>というデメリットがあります。</p>



<p>設計としては、</p>



<ul class="wp-block-list">
<li>パス操作・判定 → <code>pathlib</code></li>



<li>コピー・削除などの処理 → <code>shutil</code> / <code>os</code></li>
</ul>



<p>と役割を分けるのが分かりやすいです。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次は、<br><strong>バックアップやアーカイブをどう設計するか</strong>を見ていきましょう。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc16">手順③：バックアップとアーカイブ操作</span></h2>



<p>ファイル操作で一番ヒヤッとするのが、<br><strong>コピー・移動・上書き</strong>の処理です。</p>



<p>ここを雑に書くと、<br>「気づいたら元データが消えていた…」<br>なんてことが普通に起こります。</p>



<p>この章では、<br><strong>事故を前提にしたバックアップ設計</strong>を整理していきます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc17">① コピーと移動は役割を理解して使う</span></h3>



<p>ファイルのコピー・移動には、<br><code>shutil</code> モジュールを使います。</p>



<p>まずはコピーです。</p>



<pre class="wp-block-code"><code>import shutil

shutil.copy2("data.txt", "backup/data.txt")
</code></pre>



<p><code>copy2()</code> を使うと、</p>



<ul class="wp-block-list">
<li>ファイルの中身</li>



<li>更新日時・アクセス日時などのメタデータ</li>
</ul>



<p>も一緒にコピーされます。</p>



<p>バックアップ用途では、<br><strong><code>copy()</code> より <code>copy2()</code> を使う</strong>のが基本です。</p>



<p>次に移動です。</p>



<pre class="wp-block-code"><code>shutil.move("data.txt", "archive/data.txt")
</code></pre>



<p><code>move()</code> は、</p>



<ul class="wp-block-list">
<li>同一ファイルシステム → リネーム</li>



<li>別ファイルシステム → コピー後に元を削除</li>
</ul>



<p>という挙動になります。</p>



<p>つまり、<br><strong>内部では「削除」が絡む可能性がある</strong>ということです。</p>



<p>重要なデータでは、<br>移動前にバックアップを取る設計をおすすめします。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc18">② バックアップ設計の基本パターン</span></h3>



<p>安全なバックアップ処理では、<br>次の順番を意識します。</p>



<ol class="wp-block-list">
<li>元ファイルの存在確認</li>



<li>バックアップ先ディレクトリの作成</li>



<li><code>copy2()</code> で複製</li>



<li>本処理（上書き・移動・削除）</li>
</ol>



<p>「先にコピーしてから触る」<br>これだけで、事故率は一気に下がります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc19">③ アーカイブ（ZIP / TAR）を作成する</span></h3>



<p>複数のファイルやディレクトリを、<br><strong>まとめて保管したい</strong>場合は、アーカイブ化が便利です。</p>



<p>Pythonでは <code>shutil.make_archive()</code> を使います。</p>



<pre class="wp-block-code"><code>import shutil

shutil.make_archive(
    base_name="backup_20240101",
    format="zip",
    root_dir="data"
)
</code></pre>



<p>この1行で、</p>



<ul class="wp-block-list">
<li><code>data</code> ディレクトリ以下をまとめて</li>



<li><code>backup_20240101.zip</code> を作成</li>
</ul>



<p>してくれます。</p>



<p><code>format</code> には、</p>



<ul class="wp-block-list">
<li><code>"zip"</code></li>



<li><code>"tar"</code></li>



<li><code>"gztar"</code></li>
</ul>



<p>などが指定できます。</p>



<p>バックアップ用途なら、<br>扱いやすい <code>zip</code> が無難ですね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc20">④ バックアップは「設計」で決まる</span></h3>



<p>バックアップ処理は、<br>「一度書いて終わり」ではありません。</p>



<ul class="wp-block-list">
<li>いつ取るのか</li>



<li>どこに置くのか</li>



<li>どれくらい残すのか</li>
</ul>



<p>を先に決めておかないと、<br>気づいたら<strong>意味のないバックアップ</strong>になります。</p>



<p>ファイル操作は、<br><strong>「消す前に守る」</strong>が基本ルールです。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a target="_blank" href="https://python.cbagames.jp/2026/01/04/robust-python-script-5-principles/" title="Pythonで作る「壊れにくいスクリプト」共通設計5原則｜可読性・型・副作用・テスト・性能まで" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://python.cbagames.jp/wp-content/uploads/2026/01/a2c4a5d855600ce2de0b369a7cbca001-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://python.cbagames.jp/wp-content/uploads/2026/01/a2c4a5d855600ce2de0b369a7cbca001-160x90.jpg 160w, https://python.cbagames.jp/wp-content/uploads/2026/01/a2c4a5d855600ce2de0b369a7cbca001-300x169.jpg 300w, https://python.cbagames.jp/wp-content/uploads/2026/01/a2c4a5d855600ce2de0b369a7cbca001-1024x576.jpg 1024w, https://python.cbagames.jp/wp-content/uploads/2026/01/a2c4a5d855600ce2de0b369a7cbca001-768x432.jpg 768w, https://python.cbagames.jp/wp-content/uploads/2026/01/a2c4a5d855600ce2de0b369a7cbca001-120x68.jpg 120w, https://python.cbagames.jp/wp-content/uploads/2026/01/a2c4a5d855600ce2de0b369a7cbca001-320x180.jpg 320w, https://python.cbagames.jp/wp-content/uploads/2026/01/a2c4a5d855600ce2de0b369a7cbca001-376x212.jpg 376w, https://python.cbagames.jp/wp-content/uploads/2026/01/a2c4a5d855600ce2de0b369a7cbca001.jpg 1280w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonで作る「壊れにくいスクリプト」共通設計5原則｜可読性・型・副作用・テスト・性能まで</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonで「壊れにくいスクリプト」を作る共通設計5原則を、可読性・型ヒント・副作用の管理・テスト自動化・性能/スケールの観点で整理。Ruffやmypy、Blackなど品質チェックの導入手順も具体例つきで解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://python.cbagames.jp" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">python.cbagames.jp</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.01.04</div></div></div></div></a>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次は、<br><strong>削除処理と後処理の設計</strong>を見ていきましょう。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc21">手順④：削除と後処理（事故を防ぐ設計）</span></h2>



<p>削除処理は、<br><strong>ファイル操作の中で一番取り返しがつきません。</strong></p>



<p>読み書きやコピーは失敗してもやり直せますが、<br>削除だけは「消えたら終わり」になりがちです。</p>



<p>だからこそ削除は、<br><strong>コードを書く前に設計で守る</strong>必要があります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc22">① ファイル削除とディレクトリ削除の違い</span></h3>



<p>まずは、<br>削除対象によって使う関数を明確に分けましょう。</p>



<ul class="wp-block-list">
<li>ファイル削除 → <code>Path.unlink()</code> / <code>os.remove()</code></li>



<li>空ディレクトリ削除 → <code>Path.rmdir()</code> / <code>os.rmdir()</code></li>



<li>中身ごと削除 → <code>shutil.rmtree()</code></li>
</ul>



<p>特に <code>shutil.rmtree()</code> は、<br><strong>フォルダ以下を丸ごと消します。</strong></p>



<p>この関数を無条件で呼ぶ設計は、<br>かなり危険です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc23">② 削除前に必ずやるべきチェック</span></h3>



<p>削除処理を書くときは、<br>次の確認を習慣にしましょう。</p>



<ul class="wp-block-list">
<li>本当に存在しているか</li>



<li>想定したパスか</li>



<li>ファイルかディレクトリか</li>
</ul>



<pre class="wp-block-code"><code>from pathlib import Path

path = Path("data.txt")

if path.exists() and path.is_file():
    path.unlink()
</code></pre>



<p>たったこれだけでも、<br><strong>誤削除の確率は大きく下がります。</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc24">③ 「論理削除」という考え方</span></h3>



<p>実務では、<br>いきなり削除しない設計もよく使われます。</p>



<ul class="wp-block-list">
<li>削除予定フォルダへ移動する</li>



<li>ファイル名に <code>.bak</code> を付ける</li>



<li>日時付きフォルダに退避させる</li>
</ul>



<p>これはいわゆる<strong>論理削除</strong>です。</p>



<p>「削除」と言いつつ、<br><strong>実際は安全な場所に移しているだけ</strong>なので、 復元が可能です。</p>



<p>自動化スクリプトや定期バッチでは、<br>この考え方がとても重要になります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc25">④ 後処理とログの重要性</span></h3>



<p>削除や移動を行ったら、<br><strong>何をしたかを必ず残す</strong>ようにしましょう。</p>



<ul class="wp-block-list">
<li>削除したファイル名</li>



<li>実行日時</li>



<li>エラーが起きた場合の内容</li>
</ul>



<p>これらがログに残っているだけで、<br><strong>トラブル対応の難易度が激減</strong>します。</p>



<p>ファイル操作は、<br><strong>「やった後の説明責任」まで含めて設計</strong>です。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次は最後に、<br><strong>効率的で安全な設計のための補足Tips</strong>をまとめていきましょう。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc26">補足：効率的で安全な設計のためのTips</span></h2>



<p>ここまでで、<br>読み書き・ディレクトリ管理・バックアップ・削除まで一通り見てきました。</p>



<p>最後に、<br><strong>実務で差がつきやすい補足ポイント</strong>をまとめておきますね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc27">① 一時ファイル・一時ディレクトリを活用する</span></h3>



<p>処理の途中でしか使わないデータは、<br><strong>一時ファイルとして扱う</strong>のが安全です。</p>



<pre class="wp-block-code"><code>import tempfile

with tempfile.TemporaryDirectory() as tmp_dir:
    print(tmp_dir)
    # この中で作ったファイルは処理終了時に自動削除
</code></pre>



<p>この方法なら、</p>



<ul class="wp-block-list">
<li>削除忘れが起きない</li>



<li>途中で例外が起きても後片付けされる</li>
</ul>



<p>といったメリットがあります。</p>



<p>「後で消す前提のデータ」は、<br><strong>最初から消える設計</strong>にしておくと楽です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc28">② ファイルのメタデータを活用する</span></h3>



<p>ファイルサイズや更新日時が必要な場面も多いですよね。</p>



<pre class="wp-block-code"><code>from pathlib import Path

path = Path("data.txt")
stat = path.stat()

print(stat.st_size)   # ファイルサイズ
print(stat.st_mtime)  # 更新日時（UNIX時間）
</code></pre>



<p>これを使うと、</p>



<ul class="wp-block-list">
<li>一定サイズ以上のファイルだけ処理する</li>



<li>更新日時が新しいものだけ対象にする</li>
</ul>



<p>といった設計が可能になります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc29">③ ファイル操作はロジックと分離する</span></h3>



<p>ファイル操作は、<br><strong>プログラムの「端」に追いやる</strong>のが基本です。</p>



<p>計算や判定ロジックと、<br>ファイルI/Oが混ざると、</p>



<ul class="wp-block-list">
<li>テストしにくい</li>



<li>修正しづらい</li>



<li>事故が起きやすい</li>
</ul>



<p>という状態になります。</p>



<p>「読む」「書く」は別関数に分ける。<br>それだけでもコードはかなり安全になります。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a target="_blank" href="https://python.cbagames.jp/2025/12/16/python-exception-design-try-except/" title="Pythonの例外設計入門｜try/exceptを「どう設計するか」まで徹底解説" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-160x90.jpg 160w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-300x169.jpg 300w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-1024x576.jpg 1024w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-768x432.jpg 768w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-120x68.jpg 120w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-320x180.jpg 320w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5-376x212.jpg 376w, https://python.cbagames.jp/wp-content/uploads/2025/12/15951b85de9f4650a7fefc8c5187aaa5.jpg 1280w" sizes="auto, (max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Pythonの例外設計入門｜try/exceptを「どう設計するか」まで徹底解説</div><div class="blogcard-snippet internal-blogcard-snippet">Pythonのtry/exceptを“書ける”から“設計できる”へ。例外を握りつぶさない方針、catch範囲の決め方、独自例外の作り方、raise from・ログ・リソース解放まで、実務で困らない例外設計をまとめて解説します。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://python.cbagames.jp" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">python.cbagames.jp</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.12.16</div></div></div></div></a>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc30">まとめ</span></h2>



<p>Pythonのファイル操作は、<br>文法自体はとてもシンプルです。</p>



<p>でも実際には、<br><strong>設計を意識しないと事故が起きやすい領域</strong>でもあります。</p>



<ul class="wp-block-list">
<li>with文でリソースを確実に管理する</li>



<li>encodingは必ず明示する</li>



<li>pathlibを軸にパス操作を統一する</li>



<li>消す前に守る（バックアップ・論理削除）</li>
</ul>



<p>このあたりを意識するだけで、<br>ファイル操作のコードは<strong>一気に壊れにくく</strong>なります。</p>



<p>小さなスクリプトほど、<br>「あとで直せばいいや」が積み重なりがちです。</p>



<p>だからこそ、<br><strong>最初から安全な設計で書くクセ</strong>をつけておくと、 あとで自分を助けてくれますよ 😊</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc31">あわせて読みたい</span></h3>



<ul class="wp-block-list">
<li><a target="_blank" href="https://python.cbagames.jp/2025/12/26/python-boundary-design-io-logic-separation/">Pythonの境界設計とは？I/Oとロジック分離で“変更に強い”コードにする方法</a></li>



<li><a target="_blank" href="https://python.cbagames.jp/2025/12/30/python-io-separation-design/">PythonのI/Oが散らかる原因と直し方｜実例で学ぶ「境界」の分離設計</a></li>



<li><a target="_blank" href="https://python.cbagames.jp/2025/12/27/python-stdlib-map-beginners/">Python初心者が「標準ライブラリだけ」でどこまで戦えるか完全マップ</a></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc32">参考文献</span></h3>



<ul class="wp-block-list">
<li><a rel="noopener" target="_blank" href="https://docs.python.org/ja/3/tutorial/inputoutput.html">Python公式ドキュメント：入力と出力（ファイルの読み書きの基本）</a></li>



<li><a rel="noopener" target="_blank" href="https://docs.python.org/ja/3/library/pathlib.html">Python公式ドキュメント：pathlib ― オブジェクト指向のファイルシステムパス</a></li>



<li><a rel="noopener" target="_blank" href="https://docs.python.org/ja/3/library/os.html">Python公式ドキュメント：os ― オペレーティングシステムインターフェース</a></li>



<li><a rel="noopener" target="_blank" href="https://docs.python.org/ja/3/library/os.path.html">Python公式ドキュメント：os.path ― 共通パス名操作</a></li>



<li><a rel="noopener" target="_blank" href="https://docs.python.org/ja/3/library/shutil.html">Python公式ドキュメント：shutil ― 高水準のファイル操作</a></li>



<li><a rel="noopener" target="_blank" href="https://realpython.com/working-with-files-in-python/">Real Python：Working With Files in Python</a></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc33">よくある質問（Q&amp;A）</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">pathlibだけ使えばosは不要ですか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>多くのケースでは <code>pathlib</code> だけで十分です。 ただし、環境変数や低レベルなOS操作では <code>os</code> を併用する場面もあります。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">ファイル操作で一番事故が多いポイントは？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>上書きと削除です。 特に <code>"w"</code> モードと <code>shutil.rmtree()</code> は、 設計なしで使うと危険です。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">バックアップ処理はどこまで作り込むべき？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>「自動で消える可能性がある処理」には、 最低限バックアップを入れるのがおすすめです。 完璧よりも、戻せる設計を優先しましょう。</p>
</div></dd></dl></div>
]]></content:encoded>
					
					<wfw:commentRss>https://python.cbagames.jp/2026/01/10/python-file-operation-design/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PythonでPDFを自由自在に操作！pypdfとreportlabで実務を効率化しよう【初心者向け】</title>
		<link>https://python.cbagames.jp/2025/06/24/python-pdf-automation/</link>
					<comments>https://python.cbagames.jp/2025/06/24/python-pdf-automation/#respond</comments>
		
		<dc:creator><![CDATA[asukapy]]></dc:creator>
		<pubDate>Tue, 24 Jun 2025 03:07:17 +0000</pubDate>
				<category><![CDATA[自動化スクリプト]]></category>
		<category><![CDATA[PDF操作]]></category>
		<category><![CDATA[pypdf]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[reportlab]]></category>
		<category><![CDATA[データ処理]]></category>
		<category><![CDATA[ファイル操作]]></category>
		<category><![CDATA[業務自動化]]></category>
		<guid isPermaLink="false">https://python.cbagames.jp/?p=519</guid>

					<description><![CDATA[目次 1. はじめに｜PDF操作もPythonで自動化しよう！2. 必要なライブラリの準備とインストール🔧 インストール方法（pipコマンド）✅ インストールできたか確認しよう📝 ライブラリの簡単な特徴3. PDFの読み [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4"><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">1. はじめに｜PDF操作もPythonで自動化しよう！</a></li><li><a href="#toc2" tabindex="0">2. 必要なライブラリの準備とインストール</a><ol><li><a href="#toc3" tabindex="0">🔧 インストール方法（pipコマンド）</a></li><li><a href="#toc4" tabindex="0">✅ インストールできたか確認しよう</a></li><li><a href="#toc5" tabindex="0">📝 ライブラリの簡単な特徴</a></li></ol></li><li><a href="#toc6" tabindex="0">3. PDFの読み込みとテキスト抽出（pypdf）</a><ol><li><a href="#toc7" tabindex="0">📘 基本的な読み込み手順</a></li><li><a href="#toc8" tabindex="0">🧩 特定のページだけ読み取る</a></li><li><a href="#toc9" tabindex="0">⚠ レイアウトが崩れる？extraction_modeに注意</a></li><li><a href="#toc10" tabindex="0">💾 抽出したテキストを保存する（例：テキストファイル）</a></li></ol></li><li><a href="#toc11" tabindex="0">4. PDFから画像を抽出する方法</a><ol><li><a href="#toc12" tabindex="0">🖼 画像抽出の基本：page.imagesを使おう</a></li><li><a href="#toc13" tabindex="0">📂 全ページからすべての画像を取り出す</a></li><li><a href="#toc14" tabindex="0">🔍 画像形式についての注意</a></li></ol></li><li><a href="#toc15" tabindex="0">5. PDFファイルの分割（ページ単位）</a><ol><li><a href="#toc16" tabindex="0">✂ 単一ページだけを分割して保存</a></li><li><a href="#toc17" tabindex="0">🔁 全ページを1ページずつバラバラに保存</a></li><li><a href="#toc18" tabindex="0">📌 注意ポイント</a></li></ol></li><li><a href="#toc19" tabindex="0">6. 複数PDFの結合</a><ol><li><a href="#toc20" tabindex="0">📎 基本：2つのPDFを1つに結合する</a></li><li><a href="#toc21" tabindex="0">📂 フォルダ内のPDFをまとめて結合する</a></li><li><a href="#toc22" tabindex="0">🔍 複数ページを部分的に結合することも可能！</a></li></ol></li><li><a href="#toc23" tabindex="0">7. PDFへのテキスト・画像の書き込み（ReportLab）</a><ol><li><a href="#toc24" tabindex="0">📝 基本の書き込み手順（Canvasを使う）</a></li><li><a href="#toc25" tabindex="0">🇯🇵 日本語を使いたいときは？</a></li><li><a href="#toc26" tabindex="0">📄 複数ページに書き込むには？</a></li><li><a href="#toc27" tabindex="0">🖼 PDFに画像を書き込む</a></li></ol></li><li><a href="#toc28" tabindex="0">8. まとめ｜PDF操作を自動化して業務効率UP！</a><ol><li><a href="#toc29" tabindex="0">🧠 本記事で学んだこと</a></li><li><a href="#toc30" tabindex="0">💼 どんな場面で使える？</a></li><li><a href="#toc31" tabindex="0">🛠 今後のステップ</a></li></ol></li><li><a href="#toc32" tabindex="0">よくある質問（Q&amp;A）</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">1. はじめに｜PDF操作もPythonで自動化しよう！</span></h2>



<p>仕事で扱う資料やレポート、請求書など、<strong>PDFファイルをPythonで操作したい</strong>と感じたことはありませんか？<br>「PDFのテキストを抽出したい」「特定のページだけ分割したい」「自動で文字や画像を追加したい」――そんな作業を、毎回手作業や専用ソフトで行うのは正直かなり大変ですよね。</p>



<p>そこで活躍するのが <strong>PythonによるPDF自動化</strong>です。<br>Pythonには、PDFの読み取り・分割・結合・編集を簡単に行えるライブラリが揃っており、<strong>業務効率化や作業の自動化に直結</strong>します。</p>



<p>本記事では、初心者でも扱いやすく、実務でもよく使われている<br><strong>「pypdf」</strong> と <strong>「reportlab」</strong> の2つのライブラリを使って、PDF操作の基本から実践例までをわかりやすく解説します。</p>



<p>この記事を読むことで、次のようなことができるようになります👇</p>



<ul class="wp-block-list">
<li>PDFファイルからテキストや画像を抽出する</li>



<li>必要なページだけを抜き出して別のPDFとして保存する</li>



<li>複数のPDFを1つにまとめる</li>



<li>PDFに文字や画像を追加して新しく生成する</li>
</ul>



<p>これらの処理をPythonで自動化できれば、<strong>PDF編集にかかる時間と手間を大幅に削減</strong>できます。</p>



<p>サンプルコードはすべて<strong>コピー＆ペーストで動かせる形式</strong>で紹介するので、プログラミング初心者の方でも安心です 😊<br>それでは早速、PDF操作に必要なライブラリのインストールから始めていきましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc2">2. 必要なライブラリの準備とインストール</span></h2>



<p>PythonでPDFファイルを操作するには、まず専用のライブラリをインストールする必要があります。今回使用するのは次の2つです：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>ライブラリ名</th><th>主な用途</th></tr></thead><tbody><tr><td><code>pypdf</code></td><td>PDFの読み込み・分割・結合・テキスト抽出など</td></tr><tr><td><code>reportlab</code></td><td>PDFへの文字や画像の書き込み・出力など</td></tr></tbody></table></figure>



<p>どちらも無料で使えるオープンソースのライブラリです。</p>



<h3 class="wp-block-heading"><span id="toc3">🔧 インストール方法（pipコマンド）</span></h3>



<p>ターミナルやコマンドプロンプトを開いて、以下のコマンドを入力してください：</p>



<pre class="wp-block-preformatted"><code>pip install pypdf reportlab<br></code></pre>



<p>数秒でインストールが完了します。</p>



<h3 class="wp-block-heading"><span id="toc4">✅ インストールできたか確認しよう</span></h3>



<p>Pythonのインタプリタ（<code>python</code>コマンドなど）を開いて、次のように入力してみましょう：</p>



<pre class="wp-block-preformatted"><code>import pypdf<br>import reportlab<br></code></pre>



<p>エラーが出なければ準備OKです！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc5">📝 ライブラリの簡単な特徴</span></h3>



<ul class="wp-block-list">
<li><strong>pypdf</strong>：PDFファイルを読み込んだり、特定ページを取り出したり、複数PDFを1つにまとめるといった編集処理に強いです。PDFの中身を取り出す「リーダー」として使うイメージです。</li>



<li><strong>reportlab</strong>：PDFファイルを一から生成したり、文字・図・画像などを自由に配置できるライブラリです。こちらは「PDFを作る側」として活躍します。</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このように、<strong>pypdfは読み込み・編集向け、reportlabは出力向け</strong>という役割で使い分けます。</p>



<p>次は、実際にpypdfを使ってPDFを読み込んでみましょう！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc6">3. PDFの読み込みとテキスト抽出（pypdf）</span></h2>



<p>まずは、PythonでPDFファイルを読み込んで、<strong>中に含まれているテキストを取り出す方法</strong>を見ていきましょう。</p>



<p>ここでは、<code>pypdf</code>ライブラリの**<code>PdfReader</code>クラス**を使います。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">📘 基本的な読み込み手順</span></h3>



<p>まずは、PDFを読み込んで、全ページからテキストを取り出す簡単なサンプルです。</p>



<pre class="wp-block-preformatted"><code>from pypdf import PdfReader<br><br># PDFファイルのパス<br>reader = PdfReader("sample.pdf")<br><br># ページ数を確認<br>print(f"ページ数: {len(reader.pages)}")<br><br># 各ページからテキストを抽出<br>for i, page in enumerate(reader.pages):<br>    text = page.extract_text()<br>    print(f"--- {i+1}ページ目の内容 ---")<br>    print(text)<br></code></pre>



<p><code>reader.pages</code>は、PDFの各ページをリストのように扱える便利なプロパティです。1ページずつ順番にテキストを取り出せます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc8">🧩 特定のページだけ読み取る</span></h3>



<p>たとえば2ページ目だけを読みたい場合は次のように書けます：</p>



<pre class="wp-block-preformatted"><code>page = reader.pages[1]  # インデックスは0から始まる<br>print(page.extract_text())<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc9">⚠ レイアウトが崩れる？extraction_modeに注意</span></h3>



<p>PDFの構造によっては、抽出したテキストの<strong>改行や空白が崩れること</strong>があります。</p>



<p>そんなときは、以下のように<code>extraction_mode="layout"</code>を指定すると改善することがあります：</p>



<pre class="wp-block-preformatted"><code>text = page.extract_text(extraction_mode="layout")<br></code></pre>



<p>ただし、すべてのPDFに効果があるわけではありません。見やすく取り出せるかどうかは、PDFの構造に依存します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc10">💾 抽出したテキストを保存する（例：テキストファイル）</span></h3>



<p>取り出したテキストをファイルに保存するには以下のように書けます：</p>



<pre class="wp-block-preformatted"><code>with open("output.txt", "w", encoding="utf-8") as f:<br>    for page in reader.pages:<br>        f.write(page.extract_text() + "\n")<br></code></pre>



<p>あとでExcelに読み込むなど、他のツールと連携したいときに便利ですね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>📌 <strong>ここでのポイントまとめ：</strong></p>



<ul class="wp-block-list">
<li><code>PdfReader</code>でPDFを読み込む</li>



<li><code>page.extract_text()</code>でテキストを抽出</li>



<li>複数ページにわたってループ処理できる</li>



<li><code>layout</code>モードで整形が改善される可能性あり</li>



<li>テキストはファイルにも保存できる</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc11">4. PDFから画像を抽出する方法</span></h2>



<p>PDFには、グラフやイラスト、写真などの画像が含まれていることも多いですよね。ここでは、Pythonと<code>pypdf</code>を使って、<strong>PDFファイル内の画像を取り出して保存する方法</strong>をご紹介します！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc12">🖼 画像抽出の基本：page.imagesを使おう</span></h3>



<p><code>pypdf</code>では、PDFの各ページにある画像データを、<code>page.images</code>から取得できます。画像の情報はリストで返され、バイナリデータとして保存可能です。</p>



<p>以下は、PDFの<strong>1ページ目から画像を抽出する例</strong>です：</p>



<pre class="wp-block-preformatted"><code>from pypdf import PdfReader<br><br>reader = PdfReader("sample.pdf")<br>page = reader.pages[0]  # 1ページ目<br><br>for i, image in enumerate(page.images):<br>    with open(f"image_{i+1}.jpg", "wb") as f:<br>        f.write(image.data)  # バイナリデータとして保存<br>    print(f"{image.name} を保存しました")<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc13">📂 全ページからすべての画像を取り出す</span></h3>



<p>複数ページのPDFから、すべての画像を一括抽出したい場合は、以下のようにします：</p>



<pre class="wp-block-preformatted"><code>for page_num, page in enumerate(reader.pages):<br>    for i, image in enumerate(page.images):<br>        filename = f"page{page_num+1}_image{i+1}.jpg"<br>        with open(filename, "wb") as f:<br>            f.write(image.data)<br>        print(f"{filename} を保存しました")<br></code></pre>



<p>画像がたくさんあるPDFでも、<strong>繰り返し処理で自動保存</strong>できるのはPythonの強みですね！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc14">🔍 画像形式についての注意</span></h3>



<p><code>pypdf</code>で抽出できる画像の形式（JPEG、PNGなど）は、元のPDFに埋め込まれている形式に依存します。たとえば、スキャンPDFなどでは画像データとして埋め込まれていないケースもあり、画像が検出されないことがあります。</p>



<p><strong>画像が抽出できない場合：</strong></p>



<ul class="wp-block-list">
<li>そのPDFに画像が含まれていない可能性があります。</li>



<li>画像ではなくベクター形式（図形やテキスト）で構成されているかもしれません。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>📌 <strong>このセクションのまとめ：</strong></p>



<ul class="wp-block-list">
<li><code>page.images</code>から画像のリストを取得できる</li>



<li><code>.data</code>でバイナリデータを保存できる</li>



<li>ファイル名には<code>page番号</code>や<code>連番</code>をつけてわかりやすく</li>



<li>画像がない場合は何も取得されないこともある</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc15">5. PDFファイルの分割（ページ単位）</span></h2>



<p>「このPDF、1ページずつバラバラにしたい…」<br>「3ページ目だけ別ファイルに保存したい…」<br>そんなときにも、<strong>Python×pypdf</strong>が大活躍します！</p>



<p>このセクションでは、PDFを<strong>ページ単位で分割して、別々のPDFファイルとして保存する方法</strong>をご紹介します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc16">✂ 単一ページだけを分割して保存</span></h3>



<p>まずは、1ページだけを抜き出して保存する例です：</p>



<pre class="wp-block-preformatted"><code>from pypdf import PdfReader, PdfWriter<br><br>reader = PdfReader("sample.pdf")<br>writer = PdfWriter()<br><br># 3ページ目（インデックスは2）を抜き出す<br>writer.add_page(reader.pages[2])<br><br># 保存する<br>with open("page3_only.pdf", "wb") as f:<br>    writer.write(f)<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc17">🔁 全ページを1ページずつバラバラに保存</span></h3>



<p>PDFを1ページずつ分割して、たとえば <code>page1.pdf</code>, <code>page2.pdf</code> のように保存するには、ループ処理を使います：</p>



<pre class="wp-block-preformatted"><code>reader = PdfReader("sample.pdf")<br><br>for i, page in enumerate(reader.pages):<br>    writer = PdfWriter()<br>    writer.add_page(page)<br><br>    filename = f"page{i+1}.pdf"<br>    with open(filename, "wb") as f:<br>        writer.write(f)<br>    print(f"{filename} を保存しました")<br></code></pre>



<p><code>enumerate()</code>を使えば、ページ番号に連番をつけて保存するのも簡単です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc18">📌 注意ポイント</span></h3>



<ul class="wp-block-list">
<li><code>PdfWriter()</code> は<strong>新しいPDFファイルを作るためのクラス</strong>なので、ページごとに新しく作り直します。</li>



<li>元のPDFにセキュリティ保護（パスワードなど）がかかっている場合、分割できないことがあります。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>📌 <strong>このセクションのまとめ：</strong></p>



<ul class="wp-block-list">
<li><code>PdfReader</code> で読み込み、<code>PdfWriter</code> で出力</li>



<li><code>add_page()</code> でページを追加</li>



<li>ループで連番ファイルに保存すれば一括分割もOK！</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc19">6. 複数PDFの結合</span></h2>



<p>「レポートを1つのPDFにまとめたい」<br>「別々の請求書ファイルを1本化したい」<br>こんなときに便利なのが、<strong>PDFの結合処理</strong>です。</p>



<p>Pythonの<code>pypdf</code>を使えば、<strong>複数のPDFファイルを1つのPDFにまとめる処理もとっても簡単</strong>にできますよ！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc20">📎 基本：2つのPDFを1つに結合する</span></h3>



<p>まずは、2つのPDFファイルを1つにまとめる簡単な例から見てみましょう：</p>



<pre class="wp-block-preformatted"><code>from pypdf import PdfMerger<br><br>merger = PdfMerger()<br><br># 結合したいファイルを順番に追加<br>merger.append("report1.pdf")<br>merger.append("report2.pdf")<br><br># 出力<br>with open("merged.pdf", "wb") as f:<br>    merger.write(f)<br></code></pre>



<p>たったこれだけで、<code>report1.pdf</code>と<code>report2.pdf</code>が<code>merged.pdf</code>として保存されます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc21">📂 フォルダ内のPDFをまとめて結合する</span></h3>



<p>「このフォルダにあるPDF、全部まとめたい！」<br>そんなときは、標準ライブラリの<code>os</code>や<code>glob</code>を使って、<strong>PDFファイルを一括取得して順番に結合</strong>できます。</p>



<pre class="wp-block-preformatted"><code>import glob<br>from pypdf import PdfMerger<br><br>merger = PdfMerger()<br><br># フォルダ内のPDFを取得（例：sample1.pdf, sample2.pdf...）<br>pdf_files = sorted(glob.glob("pdf_folder/*.pdf"))<br><br>for pdf_file in pdf_files:<br>    merger.append(pdf_file)<br><br>with open("all_merged.pdf", "wb") as f:<br>    merger.write(f)<br></code></pre>



<p><code>sorted()</code>を使うと、ファイル名順に整列されるので、提出書類など順番が重要なときに便利です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc22">🔍 複数ページを部分的に結合することも可能！</span></h3>



<pre class="wp-block-preformatted"><code>merger.append("bigfile.pdf", pages=(0, 2))  # 1〜2ページ目だけ追加<br></code></pre>



<p>このように、ページ範囲を指定して部分的に結合することもできます（開始は0ベース）。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>📌 <strong>このセクションのまとめ：</strong></p>



<ul class="wp-block-list">
<li><code>PdfMerger</code>を使えば複数PDFを簡単にまとめられる</li>



<li><code>append()</code>でファイルを追加、<code>write()</code>で保存</li>



<li><code>glob</code>でフォルダ内のファイルをまとめて処理できる</li>



<li>ページ範囲を指定して部分的に結合も可能！</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc23">7. PDFへのテキスト・画像の書き込み（ReportLab）</span></h2>



<p>これまでに、<strong>PDFの読み取り・分割・結合</strong>の方法を紹介してきました。<br>ここからは逆に、<strong>PDFに新しくデータを書き込む方法</strong>を見ていきましょう！</p>



<p>Pythonの<code>reportlab</code>ライブラリを使えば、<strong>テキストや画像を自由に配置して、新しいPDFを生成</strong>できます。帳票作成やレポート出力など、業務でも活躍しますよ！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc24">📝 基本の書き込み手順（Canvasを使う）</span></h3>



<p>まずは、1ページのPDFに文字を書き込んで保存する基本的な例です：</p>



<pre class="wp-block-preformatted"><code>from reportlab.pdfgen import canvas<br><br>c = canvas.Canvas("output.pdf")  # 出力ファイル名を指定<br>c.drawString(100, 750, "こんにちは、PDFの世界！")  # (x座標, y座標, 文字列)<br>c.save()  # 保存<br></code></pre>



<ul class="wp-block-list">
<li>座標の基準は**左下が(0, 0)**です。</li>



<li>上の例では、<strong>ページの左下から(100, 750)の位置</strong>にテキストが描かれます。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc25">🇯🇵 日本語を使いたいときは？</span></h3>



<p><code>reportlab</code>はデフォルトでは日本語フォントに対応していません。<br>そこで、<strong>日本語用のTrueTypeフォント（TTF）を登録</strong>して使う必要があります。</p>



<p>以下は、フリーフォント「IPAexゴシック」を使う例です：</p>



<pre class="wp-block-preformatted"><code>from reportlab.pdfgen import canvas<br>from reportlab.pdfbase import pdfmetrics<br>from reportlab.pdfbase.ttfonts import TTFont<br><br># フォント登録（事前にIPAexゴシックのフォントファイルをダウンロードしておく）<br>pdfmetrics.registerFont(TTFont("IPAexGothic", "ipaexg.ttf"))<br><br>c = canvas.Canvas("output_japanese.pdf")<br>c.setFont("IPAexGothic", 14)<br>c.drawString(100, 750, "こんにちは、日本語も書けます！")<br>c.save()<br></code></pre>



<p>※フォントファイル（ipaexg.ttf）は同じディレクトリに置いておきましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc26">📄 複数ページに書き込むには？</span></h3>



<p>ページを追加するには、<code>showPage()</code>を使います：</p>



<pre class="wp-block-preformatted"><code>c = canvas.Canvas("multi_page.pdf")<br>for i in range(3):<br>    c.drawString(100, 750, f"{i+1}ページ目の内容です")<br>    c.showPage()  # 次のページへ<br>c.save()<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc27">🖼 PDFに画像を書き込む</span></h3>



<p>画像も簡単に挿入できます：</p>



<pre class="wp-block-preformatted"><code>c = canvas.Canvas("image_pdf.pdf")<br>c.drawImage("logo.png", 100, 500, width=200, height=100)<br>c.save()<br></code></pre>



<ul class="wp-block-list">
<li><code>drawImage()</code>は、<strong>画像の左下の位置とサイズ</strong>を指定します。</li>



<li>対応フォーマットは基本的に <strong>JPEG / PNG</strong> です。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>📌 <strong>このセクションのまとめ：</strong></p>



<ul class="wp-block-list">
<li><code>reportlab</code>の<code>canvas</code>でPDFを生成</li>



<li><code>drawString()</code>でテキストを自由な位置に配置</li>



<li>日本語はフォント登録が必要（TTFファイルを使う）</li>



<li><code>showPage()</code>でページ追加、<code>drawImage()</code>で画像挿入も可能！</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これで、<strong>PDFの読み取りから編集・出力までフルカバー</strong>できました！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc28">8. まとめ｜PDF操作を自動化して業務効率UP！</span></h2>



<p>今回は、Pythonを使ってPDFファイルを自在に操作する方法をご紹介しました。ここまで読んでくださった方は、PDFの扱いにグッと自信がついたのではないでしょうか？✨</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc29">🧠 本記事で学んだこと</span></h3>



<p>✅ PDFをPythonで読み込む（pypdf）<br>✅ テキスト・画像の抽出<br>✅ ページごとの分割や複数ファイルの結合<br>✅ 新しいPDFにテキストや画像を書き込む（reportlab）</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc30">💼 どんな場面で使える？</span></h3>



<ul class="wp-block-list">
<li>複数の請求書PDFを自動で結合して保存</li>



<li>毎月のレポートPDFから必要なページだけ抽出</li>



<li>フォーム情報をもとに自動で帳票PDFを生成</li>



<li>会議資料をPDF化して自動で保存・配布</li>
</ul>



<p>業務の中で「毎回同じようなPDF操作をしているな…」という場面があれば、<strong>Pythonで一気に自動化してしまうのが断然おすすめ</strong>です！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc31">🛠 今後のステップ</span></h3>



<p>今回紹介した内容は、すべて基本的な使い方ですが、Pythonには他にも以下のような強力なPDF操作ツールがあります：</p>



<ul class="wp-block-list">
<li><code>pdfplumber</code>（より精度の高いテキスト抽出が可能）</li>



<li><code>fitz</code>（PyMuPDF：PDFの描画、ハイライト、注釈追加などが可能）</li>
</ul>



<p><strong>ニーズに合わせて組み合わせることで、さらに高度なPDF処理が可能になりますよ。</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc32">よくある質問（Q&amp;A）</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">PDFのテキスト抽出がうまくいきません。空っぽになります。</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>PDF内のテキストが「画像」として埋め込まれている場合、<code>pypdf</code>では抽出できません。このようなPDFはOCR（文字認識）対応のライブラリ（例：Tesseract + pytesseract）の使用が必要です。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">日本語の文字が表示されず、文字化けしてしまいます。</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p><code>reportlab</code>で日本語を扱うには、日本語フォント（例：IPAゴシックやヒラギノ）を登録し、<code>canvas.setFont()</code>で設定する必要があります。英語フォントのままだと文字化けします。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">ページごとにPDFを分割したいのですが、1ページ目しか保存されません。</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p><code>PdfWriter</code>で書き出し処理をループで行っていない可能性があります。<code>for</code>ループでページを一つずつ取り出して保存することで、すべてのページを分割できます。</p>
</div></dd></dl></div>
]]></content:encoded>
					
					<wfw:commentRss>https://python.cbagames.jp/2025/06/24/python-pdf-automation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pythonでiniファイルを使う方法｜configparserの基本と読み書きの実例付き！</title>
		<link>https://python.cbagames.jp/2025/06/21/python-configparser-ini/</link>
					<comments>https://python.cbagames.jp/2025/06/21/python-configparser-ini/#respond</comments>
		
		<dc:creator><![CDATA[asukapy]]></dc:creator>
		<pubDate>Sat, 21 Jun 2025 02:28:23 +0000</pubDate>
				<category><![CDATA[Python入門]]></category>
		<category><![CDATA[configparser]]></category>
		<category><![CDATA[iniファイル]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[ファイル操作]]></category>
		<category><![CDATA[初心者向け]]></category>
		<category><![CDATA[設定ファイル]]></category>
		<guid isPermaLink="false">https://python.cbagames.jp/?p=462</guid>

					<description><![CDATA[目次 はじめに｜iniファイルって何に使うの？1. iniファイルの基本構造を理解しよう🔸 セクションは「[]」で囲む🔸 キーと値は「=」か「:」でつなぐ🔸 コメントは「#」か「;」で書ける🔸 値は複数行にもできる🔸 他 [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6"><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに｜iniファイルって何に使うの？</a></li><li><a href="#toc2" tabindex="0">1. iniファイルの基本構造を理解しよう</a><ol><li><a href="#toc3" tabindex="0">🔸 セクションは「[]」で囲む</a></li><li><a href="#toc4" tabindex="0">🔸 キーと値は「=」か「:」でつなぐ</a></li><li><a href="#toc5" tabindex="0">🔸 コメントは「#」か「;」で書ける</a></li><li><a href="#toc6" tabindex="0">🔸 値は複数行にもできる</a></li><li><a href="#toc7" tabindex="0">🔸 他の値を参照することもできる！</a></li></ol></li><li><a href="#toc8" tabindex="0">2. Pythonでiniファイルを読む｜configparserの基本</a><ol><li><a href="#toc9" tabindex="0">🔸 基本の流れはこの3ステップ！</a></li><li><a href="#toc10" tabindex="0">🔸 まずはconfigparserをインポート</a></li><li><a href="#toc11" tabindex="0">🔸 ConfigParserオブジェクトを作る</a></li><li><a href="#toc12" tabindex="0">🔸 ファイルを読み込む</a></li><li><a href="#toc13" tabindex="0">🔸 セクション・キーでアクセスする</a></li><li><a href="#toc14" tabindex="0">🔸 セクションだけを取得したいときは？</a></li></ol></li><li><a href="#toc15" tabindex="0">3. 型変換と便利な取得メソッド</a><ol><li><a href="#toc16" tabindex="0">🔸 数値を使いたいときは int() や float()</a></li><li><a href="#toc17" tabindex="0">🔸 真偽値（ブール値）を扱いたいときは getboolean()</a></li><li><a href="#toc18" tabindex="0">🔸 他にも便利な取得メソッド</a></li><li><a href="#toc19" tabindex="0">🔸 値が存在しない場合の扱いに注意！</a></li></ol></li><li><a href="#toc20" tabindex="0">4. iniファイルの活用例とベストプラクティス</a><ol><li><a href="#toc21" tabindex="0">🔸 活用例①：アプリの設定ファイルに使う</a></li><li><a href="#toc22" tabindex="0">🔸 活用例②：複数環境（開発・本番）を切り替える</a></li><li><a href="#toc23" tabindex="0">🔸 ベストプラクティス①：定数はまとめておこう</a></li><li><a href="#toc24" tabindex="0">🔸 ベストプラクティス②：iniファイルはバージョン管理しよう</a></li><li><a href="#toc25" tabindex="0">🔸 ベストプラクティス③：YAMLやJSONとの使い分け</a></li></ol></li><li><a href="#toc26" tabindex="0">5. まとめ｜iniファイルは「軽い設定管理」に最適！</a><ol><li><a href="#toc27" tabindex="0">🧩 あわせて読みたい</a></li></ol></li><li><a href="#toc28" tabindex="0">よくある質問（Q&amp;A）</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに｜iniファイルって何に使うの？</span></h2>



<p>Pythonでプログラムを書いていると、<br>「設定値を毎回コードに直接書くのが面倒…」<br>「環境ごとに設定を切り替えたい…」<br>と感じたことはありませんか？</p>



<p>たとえば、次のような情報です。</p>



<p>・データの保存先フォルダのパス<br>・ユーザー名やAPIキー<br>・デバッグモードのON / OFF設定</p>



<p>こうした <strong>あとから変更したくなる設定値</strong> を、コードにベタ書きしてしまうと、修正のたびにソースコードを触る必要があり、ミスの原因にもなります。</p>



<p>そこで便利なのが <strong>iniファイル</strong> です。<br>iniファイルは、シンプルな書式で設定を管理できる設定ファイル形式で、Pythonでは標準ライブラリの <strong>configparser</strong> を使って簡単に読み書きできます。</p>



<p><br>[settings]<br>debug = true<br>username = my_user</p>



<p>このように「セクション・キー・値」で設定を整理できるため、<br><strong>設定とロジックを分離した、変更に強いプログラム</strong> を作れるのが大きなメリットです。</p>



<p>本記事では、Python標準ライブラリの <strong>configparser</strong> を使って、</p>



<p>・iniファイルの基本構造<br>・読み込み方法・値の取得方法<br>・iniファイルへの書き込み方法</p>



<p>を、初心者の方でもつまずかないように実例付きで解説します。</p>



<p>「iniファイルや設定ファイルは難しそう…」と感じている方でも、<br>読み終わるころには <strong>すぐ実務で使える状態</strong> になっているはずです。</p>



<p>それではまず、iniファイルの基本構造から見ていきましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc2">1. iniファイルの基本構造を理解しよう</span></h2>



<p>まずは、iniファイルがどんな構造になっているのかを見てみましょう。</p>



<p>iniファイルは、<strong>以下のような3つの要素で構成されています</strong>。</p>



<ol class="wp-block-list">
<li><strong>セクション（section）</strong></li>



<li><strong>キー（key）</strong></li>



<li><strong>値（value）</strong></li>
</ol>



<h3 class="wp-block-heading"><span id="toc3">🔸 セクションは「[]」で囲む</span></h3>



<p>セクションは、設定をグループ化するための見出しのようなものです。<code>[general]</code> や <code>[user]</code> など、<strong>角括弧 <code>[ ]</code> で囲んで記述</strong>します。</p>



<pre class="wp-block-preformatted"><code>[database]<br></code></pre>



<p>このセクションの中に、具体的な設定項目を入れていきます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc4">🔸 キーと値は「=」か「:」でつなぐ</span></h3>



<p>セクションの中では、<strong>キーと値を <code>=</code> または <code>:</code> でつないで書きます</strong>。</p>



<pre class="wp-block-preformatted"><code>[database]<br>host = localhost<br>port = 3306<br></code></pre>



<p>どちらの区切り方でもOKですが、<code>=</code>を使うケースが多いです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc5">🔸 コメントは「#」か「;」で書ける</span></h3>



<p>設定ファイルには「この行は何を意味するのか？」を書いておきたくなりますよね。そんなときは<strong>行の先頭に <code>#</code> または <code>;</code> を付ける</strong>ことでコメントを追加できます。</p>



<pre class="wp-block-preformatted"><code># これはホストの設定<br>host = localhost<br>; ポート番号は3306<br>port = 3306<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc6">🔸 値は複数行にもできる</span></h3>



<p>長い文字列を複数行に分けたいときは、<strong>2行目以降をインデントして書く</strong>ことで対応できます。</p>



<pre class="wp-block-preformatted"><code>[description]<br>text = これは複数行にわたる説明です。<br>    インデントすれば続きとして認識されます。<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">🔸 他の値を参照することもできる！</span></h3>



<p>なんと、<strong>一度定義した値を使い回すこともできる</strong>んです。<code>%(キー名)s</code> という書き方で参照できます。</p>



<pre class="wp-block-preformatted"><code>[paths]<br>base_dir = /home/user/project<br>data_dir = %(base_dir)s/data<br></code></pre>



<p>この例では、<code>data_dir</code> の中で <code>base_dir</code> の値 <code>/home/user/project</code> を使っています。こうすれば、<strong>一括変更もしやすくなります</strong>ね！</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次は、いよいよこのiniファイルを<strong>Pythonから読み込んで使う方法</strong>を見ていきましょう！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc8">2. Pythonでiniファイルを読む｜configparserの基本</span></h2>



<p>iniファイルの書き方がわかったら、次はそれを<strong>Pythonプログラムの中で使えるようにする方法</strong>を見ていきましょう。</p>



<p>Pythonでは、設定ファイルを読み込むために標準モジュールの <strong><code>configparser</code></strong> を使います。追加でインストールする必要はないので、すぐに使い始められます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc9">🔸 基本の流れはこの3ステップ！</span></h3>



<pre class="wp-block-preformatted"><code>import configparser<br><br># 1. ConfigParserオブジェクトを作成<br>config = configparser.ConfigParser()<br><br># 2. iniファイルを読み込む<br>config.read('setting.ini')<br><br># 3. 値を取り出す<br>host = config['database']['host']<br>port = config['database']['port']<br></code></pre>



<p>簡単ですよね？</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc10">🔸 まずはconfigparserをインポート</span></h3>



<p>標準ライブラリなので、以下のようにインポートするだけです。</p>



<pre class="wp-block-preformatted"><code>import configparser<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc11">🔸 ConfigParserオブジェクトを作る</span></h3>



<p>設定ファイルを操作するための「操作ユニット」のようなものを用意します。</p>



<pre class="wp-block-preformatted"><code>config = configparser.ConfigParser()<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc12">🔸 ファイルを読み込む</span></h3>



<p>読み込むファイルのパスを、<code>read()</code>メソッドで指定します。</p>



<pre class="wp-block-preformatted"><code>config.read('setting.ini')<br></code></pre>



<p>このとき、<strong>相対パスや絶対パス</strong>どちらでもOKです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc13">🔸 セクション・キーでアクセスする</span></h3>



<p>設定値は、辞書のようにしてアクセスできます。</p>



<pre class="wp-block-preformatted"><code>config['セクション名']['キー名']<br></code></pre>



<p>たとえば、<code>setting.ini</code>の中身がこうだったとします：</p>



<pre class="wp-block-preformatted"><code>[database]<br>host = localhost<br>port = 3306<br></code></pre>



<p>これをPythonで読み込むと…</p>



<pre class="wp-block-preformatted"><code>host = config['database']['host']  # 'localhost'<br>port = config['database']['port']  # '3306'（文字列）<br></code></pre>



<p>すべての値は<strong>文字列として取得される</strong>ので、数値として使いたいときは変換が必要です。これについては次の章で詳しく解説します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc14">🔸 セクションだけを取得したいときは？</span></h3>



<p>セクションごとに辞書のようにまとめて扱いたいときは、次のように書けます：</p>



<pre class="wp-block-preformatted"><code>db_config = config['database']<br>print(db_config['host'])  # localhost<br></code></pre>



<p>セクションをひとまとめにできるので、使い勝手がよくなります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次は、**取得した値をどう扱うか？型の変換はどうする？ブール値の扱いは？**といった点を詳しく見ていきます！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc15">3. 型変換と便利な取得メソッド</span></h2>



<p>前の章で、iniファイルから値を読み込む方法を紹介しましたが、**取得した値はすべて「文字列（str）」**として扱われます。</p>



<p>でも実際のアプリでは、数値や真偽値など、<strong>型に合わせて使いたい場面が多い</strong>ですよね。ここではそのための便利な方法を解説します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc16">🔸 数値を使いたいときは int() や float()</span></h3>



<p>たとえば、ポート番号をiniファイルから読み込んだとき：</p>



<pre class="wp-block-preformatted"><code>[server]<br>port = 8080<br></code></pre>



<p>Pythonでそのまま取得すると…</p>



<pre class="wp-block-preformatted"><code>port = config['server']['port']<br>print(type(port))  # &lt;class 'str'&gt;<br></code></pre>



<p>→ 文字列ですね。</p>



<p>このままだと数値として比較したり計算したりできないので、<strong><code>int()</code>関数で変換</strong>して使います：</p>



<pre class="wp-block-preformatted"><code>port = int(config['server']['port'])<br></code></pre>



<p>小数点を含む数値なら <code>float()</code> を使いましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc17">🔸 真偽値（ブール値）を扱いたいときは getboolean()</span></h3>



<p>Pythonでは <code>True</code> や <code>False</code> を使って条件分岐することが多いですが、<strong>文字列としての <code>'true'</code> や <code>'false'</code> はそのままでは使えません</strong>。</p>



<p>そんなときは、セクションオブジェクトの <strong><code>getboolean()</code>メソッド</strong> を使えばOK！</p>



<pre class="wp-block-preformatted"><code>[feature]<br>enabled = true<br></code></pre>



<pre class="wp-block-preformatted"><code>enabled = config.getboolean('feature', 'enabled')<br>print(enabled)  # True（ブール型）<br></code></pre>



<p>次のような文字列はすべて <code>True</code> として認識されます：</p>



<ul class="wp-block-list">
<li><code>true</code>, <code>yes</code>, <code>on</code>, <code>1</code></li>
</ul>



<p>逆に以下は <code>False</code> になります：</p>



<ul class="wp-block-list">
<li><code>false</code>, <code>no</code>, <code>off</code>, <code>0</code></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc18">🔸 他にも便利な取得メソッド</span></h3>



<p>configparserでは、他にも次のようなメソッドが用意されています：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>メソッド名</th><th>戻り値の型</th><th>説明</th></tr></thead><tbody><tr><td><code>get()</code></td><td>str（文字列）</td><td>通常の取得（これが基本）</td></tr><tr><td><code>getint()</code></td><td>int（整数）</td><td>整数として取得</td></tr><tr><td><code>getfloat()</code></td><td>float（小数）</td><td>小数として取得</td></tr><tr><td><code>getboolean()</code></td><td>bool（真偽値）</td><td>真偽値として取得（yes/noなど）</td></tr></tbody></table></figure>



<p>これらを使えば、<strong>毎回<code>int()</code>や<code>float()</code>で変換する手間が省けてコードもすっきり</strong>します。</p>



<pre class="wp-block-preformatted"><code>timeout = config.getint('server', 'timeout')<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc19">🔸 値が存在しない場合の扱いに注意！</span></h3>



<p>設定ファイルに存在しないキーを読み込もうとすると、<strong>例外（<code>KeyError</code>）が発生</strong>します。</p>



<pre class="wp-block-preformatted"><code>print(config['server']['not_exist'])  # ← エラー！<br></code></pre>



<p>安全に扱いたい場合は、<code>get()</code>にデフォルト値を渡すような工夫をすると安心です（独自関数で包むなど）。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次は、実際の現場で使える<strong>iniファイルの活用例と運用のベストプラクティス</strong>を紹介します。ここまでの知識をどう活かせるのか、ぜひチェックしてみてください！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc20">4. iniファイルの活用例とベストプラクティス</span></h2>



<p>ここまでで、iniファイルの基本的な構文や、Pythonからの読み込み方法が分かってきましたね。</p>



<p>では実際にどんな場面で役立つのか、活用例や<strong>ベストな使い方のコツ</strong>を見ていきましょう！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc21">🔸 活用例①：アプリの設定ファイルに使う</span></h3>



<p>小〜中規模のPythonスクリプトやデスクトップアプリで、<strong>環境や動作を外部から制御する</strong>のにiniファイルはとても便利です。</p>



<p>たとえば次のような設定ファイルを用意しておくと…</p>



<pre class="wp-block-preformatted"><code>[app]<br>theme = dark<br>language = ja<br><br>[paths]<br>base_dir = /home/user/myapp<br>log_dir = %(base_dir)s/logs<br></code></pre>



<p>ユーザーが設定を自由に書き換えられるようになりますし、アプリの再起動なしで反映することも可能です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc22">🔸 活用例②：複数環境（開発・本番）を切り替える</span></h3>



<p>WebアプリやAPIを開発していると、<strong>開発環境と本番環境で設定を分けたい</strong>ことがあります。</p>



<pre class="wp-block-preformatted"><code>[development]<br>debug = true<br>db_host = localhost<br><br>[production]<br>debug = false<br>db_host = db.prod.example.com<br></code></pre>



<p>Pythonのコード内で <code>環境名</code> を切り替えることで、設定を柔軟に読み替えられます。</p>



<pre class="wp-block-preformatted"><code>env = 'development'  # ここを 'production' に変えるだけで切り替えOK<br>config = configparser.ConfigParser()<br>config.read('setting.ini')<br>db_host = config[env]['db_host']<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc23">🔸 ベストプラクティス①：定数はまとめておこう</span></h3>



<p>複数の値で共通になる<strong>パスや定数は、変数として定義して再利用</strong>すると便利です。</p>



<pre class="wp-block-preformatted"><code>[common]<br>base_dir = /app/data<br><br>[log]<br>log_dir = %(base_dir)s/logs<br></code></pre>



<p>あとでパスを変更したくなっても、1箇所だけ直せばOKなので、<strong>保守性が高くなります</strong>。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc24">🔸 ベストプラクティス②：iniファイルはバージョン管理しよう</span></h3>



<p>設定ファイルは、<strong>Gitなどのバージョン管理に含めておくことが大切</strong>です。</p>



<p>ただし、パスワードやAPIキーなど<strong>機密情報を含む場合は、別ファイルに分ける</strong>か <code>.gitignore</code> で除外しておくと安全です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc25">🔸 ベストプラクティス③：YAMLやJSONとの使い分け</span></h3>



<p>最近はYAMLやJSON形式の設定ファイルもよく使われます。それぞれの特徴をまとめてみると…</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>形式</th><th>特徴</th><th>向いているケース</th></tr></thead><tbody><tr><td>INI</td><td>シンプル、軽量、見やすい</td><td>小規模設定、ユーザー編集が前提</td></tr><tr><td>YAML</td><td>階層構造、可読性が高い</td><td>中〜大規模設定、複雑な構造が必要な場合</td></tr><tr><td>JSON</td><td>機械処理向き、他言語と互換性◎</td><td>Webアプリ、APIレスポンス</td></tr></tbody></table></figure>



<p><strong>iniファイルは「とにかく簡単に設定したいとき」にピッタリ</strong>なんです！</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここまでで、iniファイルの基礎から活用法までバッチリ理解できましたね。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc26">5. まとめ｜iniファイルは「軽い設定管理」に最適！</span></h2>



<p>ここまで、Pythonでiniファイルを使う方法を見てきました。</p>



<p>おさらいすると、iniファイルは…</p>



<ul class="wp-block-list">
<li><strong>設定をコードの外に出して管理できる</strong></li>



<li><strong>セクション・キー・値のシンプルな構造で分かりやすい</strong></li>



<li><strong>Python標準の<code>configparser</code>で簡単に読み込める</strong></li>



<li><strong>型変換や変数参照も柔軟にできる</strong></li>
</ul>



<p>というメリットがあります。</p>



<p>とくに、小規模なスクリプトやツール、設定の多くないデスクトップアプリなどでは、<strong>「ちょうどいい」設定管理の方法</strong>として活躍してくれます。</p>



<p>もちろん、もっと複雑な設定が必要なら、YAMLやJSONといった別のフォーマットに移行してもOK。その前のステップとして、まずはini形式から始めてみるのがオススメです。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これで、あなたも<strong>設定ファイルマスターの第一歩</strong>を踏み出しました！</p>



<p>設定の記述と読み込みができるようになれば、アプリやスクリプトの使い勝手もグッと良くなります。ぜひ、今回の知識をあなたのプロジェクトに活かしてみてくださいね。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc27">🧩 あわせて読みたい</span></h3>



<ul class="wp-block-list">
<li>🔗 <a target="_blank" href="https://python.cbagames.jp/2025/06/16/python-yaml-file-basic/">【Python入門】YAMLファイルの書き方と使い方｜設定ファイルの操作をわかりやすく解説！</a><br>YAMLファイルの読み書きを行う方法を、<code>PyYAML</code>を使って丁寧に解説。iniとの使い分けにも注目。</li>



<li>🔗 <a target="_blank" href="https://python.cbagames.jp/2025/06/13/python-json-module-guide/">【Python入門】jsonモジュールの使い方｜JSONの読み書きと変換をやさしく解説！</a><br>設定ファイルとしてもよく使われるJSON形式の扱い方を、標準ライブラリで学べます。</li>



<li>🔗 <a target="_blank" href="https://python.cbagames.jp/2025/06/13/python-pathlib-beginner-guide/">【Python入門】pathlibの使い方を完全解説｜フォルダー・パス操作が簡単になる方法</a><br>ファイルやフォルダのパスを扱うならこれ！設定ファイルとの組み合わせにも便利です。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc28">よくある質問（Q&amp;A）</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">iniファイルはどんなときに使えばいいの？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>プログラムの「設定」や「構成情報」を、コードとは別に管理したいときに便利です。たとえば、フォルダのパス、ログレベル、使用モード（テスト／本番）などを記録しておくのに最適です。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">Pythonの<code>configparser</code>で取得した値がすべて文字列になるのはなぜ？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>iniファイルの仕様上、すべての値は「文字列」として扱われます。そのため、数値や真偽値として使いたい場合は、<code>int()</code>や<code>getboolean()</code>などで<strong>明示的に変換</strong>する必要があります。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">値を他のキーの値で参照できるってどういう意味？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>一度定義した値を別の場所で再利用できる仕組みです。たとえば：</p>



<pre class="wp-block-preformatted"><code>[base]<br>root = /app<br><br>[log]<br>log_dir = %(root)s/logs<br></code></pre>



<p>このように書くと、<code>log_dir</code>には「/app/logs」が自動で代入されます。<strong>パスの一括管理</strong>などでとても役立ちます。</p>
</div></dd></dl></div>
]]></content:encoded>
					
					<wfw:commentRss>https://python.cbagames.jp/2025/06/21/python-configparser-ini/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Python入門】jsonモジュールの使い方｜JSONの読み書きと変換をやさしく解説！</title>
		<link>https://python.cbagames.jp/2025/06/13/python-json-module-guide/</link>
					<comments>https://python.cbagames.jp/2025/06/13/python-json-module-guide/#respond</comments>
		
		<dc:creator><![CDATA[asukapy]]></dc:creator>
		<pubDate>Fri, 13 Jun 2025 03:12:09 +0000</pubDate>
				<category><![CDATA[Python入門]]></category>
		<category><![CDATA[jsonモジュール]]></category>
		<category><![CDATA[JSON形式]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Web API]]></category>
		<category><![CDATA[データ変換]]></category>
		<category><![CDATA[ファイル操作]]></category>
		<guid isPermaLink="false">https://python.cbagames.jp/?p=282</guid>

					<description><![CDATA[目次 はじめに｜JSONってなに？なんでPythonで使うの？JSONとは「データの言語」みたいなものなんでPythonでもJSONを使うの？2. JSONとPythonのデータ型の違い✅ 文字列（String）✅ 真偽 [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8"><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに｜JSONってなに？なんでPythonで使うの？</a><ol><li><a href="#toc2" tabindex="0">JSONとは「データの言語」みたいなもの</a></li><li><a href="#toc3" tabindex="0">なんでPythonでもJSONを使うの？</a></li></ol></li><li><a href="#toc4" tabindex="0">2. JSONとPythonのデータ型の違い</a><ol><li><a href="#toc5" tabindex="0">✅ 文字列（String）</a></li><li><a href="#toc6" tabindex="0">✅ 真偽値（Boolean）</a></li><li><a href="#toc7" tabindex="0">✅ None と null</a></li><li><a href="#toc8" tabindex="0">✅ 数値（Number）</a></li><li><a href="#toc9" tabindex="0">✅ エスケープ文字の扱い</a></li><li><a href="#toc10" tabindex="0">まとめ</a></li></ol></li><li><a href="#toc11" tabindex="0">3. PythonでJSONを扱う基本（jsonモジュール）</a><ol><li><a href="#toc12" tabindex="0">3-1. Pythonのデータ → JSON文字列に変換する（json.dumps()）</a><ol><li><a href="#toc13" tabindex="0">✅ 日本語が「文字化け」しちゃう？</a></li><li><a href="#toc14" tabindex="0">✅ ダブルクォートやバックスラッシュの自動処理</a></li></ol></li><li><a href="#toc15" tabindex="0">3-2. JSON文字列 → Pythonのデータに変換する（json.loads()）</a><ol><li><a href="#toc16" tabindex="0">✅ ネストされたデータ（階層構造）もOK！</a></li></ol></li><li><a href="#toc17" tabindex="0">まとめ</a></li></ol></li><li><a href="#toc18" tabindex="0">4. JSONファイルの読み書き</a><ol><li><a href="#toc19" tabindex="0">✅ JSONファイルを作って保存する（書き込み）</a><ol><li><a href="#toc20" tabindex="0">ポイント解説：</a></li></ol></li><li><a href="#toc21" tabindex="0">✅ JSONファイルを読み込む</a><ol><li><a href="#toc22" tabindex="0">ポイント：</a></li></ol></li><li><a href="#toc23" tabindex="0">✅ エラー対策のヒント</a></li><li><a href="#toc24" tabindex="0">おまけ：ファイルを読み込んで文字列として処理する場合</a></li></ol></li><li><a href="#toc25" tabindex="0">5. よくあるエラーと対処法</a><ol><li><a href="#toc26" tabindex="0">🔴 ① json.decoder.JSONDecodeError</a></li><li><a href="#toc27" tabindex="0">🔴 ② TypeError: Object of type ～ is not JSON serializable</a></li><li><a href="#toc28" tabindex="0">🔴 ③ FileNotFoundError</a></li><li><a href="#toc29" tabindex="0">🔴 ④ 文字化け（\uXXXXが出る）</a></li><li><a href="#toc30" tabindex="0">まとめ：エラーの早見表</a></li></ol></li><li><a href="#toc31" tabindex="0">まとめ｜JSONを扱えるとPythonがもっと便利に！</a><ol><li><a href="#toc32" tabindex="0">あわせて読みたい｜関連するおすすめ記事</a></li></ol></li><li><a href="#toc33" tabindex="0">よくある質問（Q&amp;A）</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに｜JSONってなに？なんでPythonで使うの？</span></h2>



<p>「JSON（ジェイソン）」って聞いたことありますか？プログラミングの世界ではよく出てくる言葉なんですが、初心者の方にとっては「なんのこっちゃ？」って感じかもしれませんね。</p>



<p>でも安心してください！この記事では、JSONとは何か、そしてなぜPythonで使うことが多いのかを、やさしく、丁寧に解説していきます。</p>



<h3 class="wp-block-heading"><span id="toc2">JSONとは「データの言語」みたいなもの</span></h3>



<p>まず、JSONは「<strong>JavaScript Object Notation（ジャバスクリプト・オブジェクト・ノーテーション）</strong>」の略です。これは、**データの形をルールにそって表した“書き方”**のことです。</p>



<p>たとえば、人の情報を「名前」「年齢」「住所」みたいに表したいとき、こういうふうに書けます：</p>



<pre class="wp-block-preformatted"><code>{<br>  "name": "たろう",<br>  "age": 20,<br>  "address": "東京都"<br>}<br></code></pre>



<p>このように、JSONは**データをわかりやすく整理して書くためのフォーマット（形式）**なんです。</p>



<h3 class="wp-block-heading"><span id="toc3">なんでPythonでもJSONを使うの？</span></h3>



<p>実はこのJSON、もともとはJavaScriptという言語から生まれた書き方なんですが、<strong>いまではほとんどのプログラミング言語がこの形式を理解できます。</strong></p>



<p>Pythonでも、Webアプリを作ったり、APIと呼ばれる外部サービスとやりとりをしたり、設定ファイルを読み書きしたりするときに、<strong>JSONがよく使われます</strong>。</p>



<p>たとえば、Pythonで「天気予報を調べるアプリ」を作るとき、インターネット上の天気情報APIからデータをもらう必要があります。そのとき、送られてくる情報はたいていJSON形式なんです。</p>



<p>だから、Pythonでアプリやツールを作るときには、このJSONの読み書きができるようになっておくととても便利なんですね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc4">2. JSONとPythonのデータ型の違い</span></h2>



<p>JSONとPython、どちらも似たような見た目でデータを書けるんですが、実は<strong>ちょっとしたルールの違い</strong>があります。ここでは、その違いをやさしく紹介します。</p>



<h3 class="wp-block-heading"><span id="toc5">✅ 文字列（String）</span></h3>



<p>Pythonでは、文字列をシングルクォート（<code>'</code>）でもダブルクォート（<code>"</code>）でも書けますよね。</p>



<pre class="wp-block-preformatted"><code>name = "たろう"<br>name = 'たろう'<br></code></pre>



<p>どちらでもOKです。</p>



<p>でも、<strong>JSONではダブルクォート <code>" "</code> しか使えません</strong>。</p>



<pre class="wp-block-preformatted"><code>{ "name": "たろう" }  ← OK！<br>{ 'name': 'たろう' }  ← NG！（これはエラーになります）<br></code></pre>



<p>JSONでは必ずダブルクォートを使うようにしましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc6">✅ 真偽値（Boolean）</span></h3>



<p>Pythonでは「True / False」と大文字で書きます。</p>



<pre class="wp-block-preformatted"><code>is_hungry = True<br></code></pre>



<p>でもJSONでは、小文字で「<strong>true / false</strong>」と書くのが正解です。</p>



<pre class="wp-block-preformatted"><code>{ "is_hungry": true }<br></code></pre>



<p>この違い、見た目はそっくりなのでうっかりミスしやすいポイントです！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">✅ None と null</span></h3>



<p>Pythonで「何もないよー」という状態を表すのは <code>None</code> ですよね。でも、JSONではこれを <code>null</code> と書きます。</p>



<pre class="wp-block-preformatted"><code>status = None  # Python<br></code></pre>



<pre class="wp-block-preformatted"><code>{ "status": null }  # JSON<br></code></pre>



<p>JSONでは <strong>null = None</strong> と覚えておけばOKです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc8">✅ 数値（Number）</span></h3>



<p>数値に関しては、PythonもJSONも<strong>基本的にそのまま書けばOK</strong>です。</p>



<pre class="wp-block-preformatted"><code>age = 25<br>height = 1.75<br></code></pre>



<pre class="wp-block-preformatted"><code>{ "age": 25, "height": 1.75 }<br></code></pre>



<p>ただし、文字列と間違えないように、数値にはクォート（<code>"</code>や<code>'</code>）をつけないように注意しましょう！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc9">✅ エスケープ文字の扱い</span></h3>



<p>JSONでは、特殊な記号を文字列の中に含めたいときには「<strong>バックスラッシュ（\）</strong>」を使ってエスケープします。</p>



<p>たとえば、こんなふうに書きます：</p>



<pre class="wp-block-preformatted"><code>{ "message": "彼は\"Python\"が好きです" }<br></code></pre>



<p>これはこう見えます：</p>



<pre class="wp-block-preformatted"><code>彼は"Python"が好きです<br></code></pre>



<p>Pythonでも同じようなエスケープ処理がありますが、JSONを扱うときにも**「バックスラッシュの役割」**を理解しておくと安心です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc10">まとめ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>データの種類</th><th>Python</th><th>JSON</th></tr></thead><tbody><tr><td>文字列</td><td><code>'abc'</code> or <code>"abc"</code></td><td><code>"abc"</code>のみ</td></tr><tr><td>真偽値</td><td><code>True</code>, <code>False</code></td><td><code>true</code>, <code>false</code></td></tr><tr><td>無（空）</td><td><code>None</code></td><td><code>null</code></td></tr><tr><td>数値</td><td><code>123</code>, <code>3.14</code></td><td><code>123</code>, <code>3.14</code></td></tr><tr><td>エスケープ</td><td><code>\"</code>, <code>\\</code></td><td><code>\"</code>, <code>\\</code></td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この違いをしっかり覚えておけば、PythonでJSONを扱うときにエラーが起きにくくなりますよ！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc11">3. PythonでJSONを扱う基本（jsonモジュール）</span></h2>



<p>Pythonでは、<strong><code>json</code>という標準モジュール</strong>を使えば、JSONの読み書きがとっても簡単にできます。特別なライブラリをインストールしなくても、最初から使えるのが嬉しいポイントです！</p>



<p>ここでは、PythonでJSONを扱うための<strong>基本的な使い方</strong>を、例といっしょにわかりやすく紹介していきますね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc12">3-1. Pythonのデータ → JSON文字列に変換する（json.dumps()）</span></h3>



<p>たとえば、Pythonで辞書データを作ったとします。</p>



<pre class="wp-block-preformatted"><code>data = {<br>    "name": "たろう",<br>    "age": 18,<br>    "is_student": True<br>}<br></code></pre>



<p>このデータをJSON形式の「文字列」に変えたいときは、<code>json.dumps()</code> を使います。</p>



<pre class="wp-block-preformatted"><code>import json<br><br>json_text = json.dumps(data)<br>print(json_text)<br></code></pre>



<p>出力結果：</p>



<pre class="wp-block-preformatted"><code>{"name": "たろう", "age": 18, "is_student": true}<br></code></pre>



<p>ちゃんとPythonの <code>True</code> が JSONの <code>true</code> に変わってるのがわかりますね！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><span id="toc13">✅ 日本語が「文字化け」しちゃう？</span></h4>



<p>実は、<code>json.dumps()</code> はデフォルトで<strong>日本語をUnicodeという文字コードに変換</strong>しちゃいます。たとえば：</p>



<pre class="wp-block-preformatted"><code>json.dumps({"item": "りんご"})<br></code></pre>



<p>結果：</p>



<pre class="wp-block-preformatted"><code>{"item": "\u308a\u3093\u3054"}<br></code></pre>



<p>「えっ、これなに！？」って思いますよね。</p>



<p>そんなときは、<strong><code>ensure_ascii=False</code></strong> をつければOK！</p>



<pre class="wp-block-preformatted"><code>json.dumps({"item": "りんご"}, ensure_ascii=False)<br></code></pre>



<p>結果：</p>



<pre class="wp-block-preformatted"><code>{"item": "りんご"}<br></code></pre>



<p>これで日本語もきれいに表示されますよ！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><span id="toc14">✅ ダブルクォートやバックスラッシュの自動処理</span></h4>



<p>もし文字列の中に <code>"</code> や <code>\</code> を含んでいたら、<code>json.dumps()</code> が自動でエスケープしてくれます。</p>



<pre class="wp-block-preformatted"><code>json.dumps({"text": '彼は"Python"が好きです'})<br></code></pre>



<p>結果：</p>



<pre class="wp-block-preformatted"><code>{"text": "彼は\"Python\"が好きです"}<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc15">3-2. JSON文字列 → Pythonのデータに変換する（json.loads()）</span></h3>



<p>逆に、JSON形式の「文字列」をPythonの辞書などに戻したいときは、<code>json.loads()</code> を使います。</p>



<pre class="wp-block-preformatted"><code>json_text = '{"name": "はなこ", "age": 22, "is_student": false}'<br>python_obj = json.loads(json_text)<br>print(python_obj)<br></code></pre>



<p>結果：</p>



<pre class="wp-block-preformatted"><code>{'name': 'はなこ', 'age': 22, 'is_student': False}<br></code></pre>



<p><code>false</code> がちゃんと <code>False</code> に変わってますね！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><span id="toc16">✅ ネストされたデータ（階層構造）もOK！</span></h4>



<p>JSONでは、こんなふうに中に辞書やリストを入れることもあります：</p>



<pre class="wp-block-preformatted"><code>{<br>  "user": {<br>    "name": "たろう",<br>    "scores": [80, 90, 100]<br>  }<br>}<br></code></pre>



<p>これを Python に変換しても、ちゃんとネスト（入れ子）構造が保たれます。</p>



<pre class="wp-block-preformatted"><code>text = '{"user": {"name": "たろう", "scores": [80, 90, 100]}}'<br>data = json.loads(text)<br>print(data["user"]["scores"][1])  # → 90<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc17">まとめ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>処理の目的</th><th>関数名</th><th>よく使う引数</th></tr></thead><tbody><tr><td>Python → JSON文字列</td><td><code>json.dumps()</code></td><td><code>ensure_ascii=False</code>など</td></tr><tr><td>JSON文字列 → Python</td><td><code>json.loads()</code></td><td>特になし</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>この2つの関数を覚えておくだけで、JSONとのやりとりがぐんと楽になります！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc18">4. JSONファイルの読み書き</span></h2>



<p>これまでは「文字列」としてJSONを扱ってきましたが、実際の開発では**JSON形式のファイル（.json）**を読み込んだり、書き込んだりする場面がとても多いです。</p>



<p>たとえば、アプリの設定ファイルや、保存したデータを次回読み込むために使われたりします。</p>



<p>Pythonでは、<strong>ふつうのファイルの読み書き＋<code>json</code>モジュール</strong>を組み合わせることで簡単に扱えますよ！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc19">✅ JSONファイルを作って保存する（書き込み）</span></h3>



<p>まずは、Pythonの辞書データを <code>.json</code> ファイルに保存してみましょう。</p>



<pre class="wp-block-preformatted"><code>import json<br><br>data = {<br>    "title": "Python入門",<br>    "price": 0,<br>    "tags": ["プログラミング", "初心者", "Python"]<br>}<br><br># ファイルに書き込む<br>with open("book.json", "w", encoding="utf-8") as f:<br>    json.dump(data, f, ensure_ascii=False, indent=2)<br></code></pre>



<h4 class="wp-block-heading"><span id="toc20">ポイント解説：</span></h4>



<ul class="wp-block-list">
<li><code>open("book.json", "w", encoding="utf-8")</code><br>→ 書き込みモード（<code>"w"</code>）でファイルを開きます。日本語を扱うのでエンコーディングは <code>"utf-8"</code> に！</li>



<li><code>json.dump()</code><br>→ データをファイルに直接書き込む関数です。</li>



<li><code>ensure_ascii=False</code><br>→ 日本語をそのまま出力したいときの必須オプション！</li>



<li><code>indent=2</code><br>→ JSONファイルを<strong>きれいに整形</strong>して保存するオプション。人間にも見やすくなります♪</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc21">✅ JSONファイルを読み込む</span></h3>



<p>今度は、保存された <code>.json</code> ファイルを読み込んで、Pythonの辞書データとして使ってみましょう。</p>



<pre class="wp-block-preformatted"><code>import json<br><br># ファイルから読み込む<br>with open("book.json", "r", encoding="utf-8") as f:<br>    data = json.load(f)<br><br>print(data["title"])  # → Python入門<br></code></pre>



<h4 class="wp-block-heading"><span id="toc22">ポイント：</span></h4>



<ul class="wp-block-list">
<li><code>open(..., "r", encoding="utf-8")</code><br>→ 読み込みモード（<code>"r"</code>）で開きます。</li>



<li><code>json.load()</code><br>→ JSONファイルの内容を<strong>Pythonの辞書などのオブジェクトに変換</strong>してくれます。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc23">✅ エラー対策のヒント</span></h3>



<p>ファイルを読み込むときは、次のようなエラーが出ることもあります。</p>



<ul class="wp-block-list">
<li>ファイルが存在しない → <code>FileNotFoundError</code></li>



<li>JSONの書式が間違っている → <code>json.JSONDecodeError</code></li>
</ul>



<p>このようなときは、ファイル名や拡張子、JSONの中身が正しいかをチェックしてみてくださいね！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc24">おまけ：ファイルを読み込んで文字列として処理する場合</span></h3>



<p>もしファイルの中身を「一度文字列として読み込んでから」処理したいなら、こう書けます：</p>



<pre class="wp-block-preformatted"><code>with open("book.json", "r", encoding="utf-8") as f:<br>    json_text = f.read()<br><br>data = json.loads(json_text)<br></code></pre>



<p><code>ead()</code>で文字列にして、それから <code>json.loads()</code> で辞書に変換するパターンですね！</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これで、<strong>JSONファイルの読み書きもバッチリ</strong>です！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc25">5. よくあるエラーと対処法</span></h2>



<p>PythonでJSONを扱っていると、<strong>ちょっとしたミス</strong>でエラーが出ることがあります。ここでは、よくあるエラーとその「原因」や「直し方」をわかりやすく紹介します！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc26">🔴 ① json.decoder.JSONDecodeError</span></h3>



<p><strong>エラー例：</strong></p>



<pre class="wp-block-preformatted"><code>import json<br><br>text = '{name: "たろう"}'  # ← カギかっこのミス！<br>data = json.loads(text)<br></code></pre>



<p>出力されるエラー：</p>



<pre class="wp-block-preformatted"><code>json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes<br></code></pre>



<p><strong>原因と対処法：</strong></p>



<p>このエラーは、JSON文字列の<strong>書き方が正しくない</strong>ときに出ます。</p>



<p>JSONでは、キーや文字列に<strong>ダブルクォート（&#8221;）が必須</strong>です。</p>



<p>✅ 修正例：</p>



<pre class="wp-block-preformatted"><code>text = '{"name": "たろう"}'  # ダブルクォートで囲む！<br>data = json.loads(text)<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc27">🔴 ② TypeError: Object of type ～ is not JSON serializable</span></h3>



<p><strong>エラー例：</strong></p>



<pre class="wp-block-preformatted"><code>import json<br><br>def greet():<br>    return "こんにちは"<br><br>data = {"greeting": greet}<br>json.dumps(data)<br></code></pre>



<p><strong>原因と対処法：</strong></p>



<p>このエラーは、「JSONに変換できないデータ」が含まれているときに出ます。</p>



<p>上の例では、関数 <code>greet</code> をJSONに変換しようとしたためにエラーになっています。</p>



<p>✅ 修正例：</p>



<pre class="wp-block-preformatted"><code>data = {"greeting": greet()}  # 関数を実行してから渡す<br>json.dumps(data)<br></code></pre>



<p>✅ 変換できない主なデータ：</p>



<ul class="wp-block-list">
<li>関数</li>



<li>クラスのインスタンス（未対応のもの）</li>



<li>datetimeオブジェクト（→文字列に変換すればOK）</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc28">🔴 ③ FileNotFoundError</span></h3>



<p><strong>エラー例：</strong></p>



<pre class="wp-block-preformatted"><code>with open("setting.json", "r", encoding="utf-8") as f:<br>    data = json.load(f)<br></code></pre>



<p><strong>原因と対処法：</strong></p>



<p>指定したファイルが<strong>存在しないとき</strong>に出るエラーです。</p>



<p>✅ 修正チェックポイント：</p>



<ul class="wp-block-list">
<li>ファイル名にまちがいがないか？</li>



<li>拡張子 <code>.json</code> を忘れていないか？</li>



<li>ファイルが本当に同じフォルダにあるか？</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc29">🔴 ④ 文字化け（\uXXXXが出る）</span></h3>



<p><strong>例：</strong></p>



<pre class="wp-block-preformatted"><code>json.dumps({"メッセージ": "こんにちは"})<br></code></pre>



<p>出力：</p>



<pre class="wp-block-preformatted"><code>{"メッセージ": "\u3053\u3093\u306b\u3061\u306f"}<br></code></pre>



<p><strong>対処法：</strong></p>



<p>→ <code>ensure_ascii=False</code> をつけましょう！</p>



<pre class="wp-block-preformatted"><code>json.dumps({"メッセージ": "こんにちは"}, ensure_ascii=False)<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc30">まとめ：エラーの早見表</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>エラー名</th><th>主な原因</th><th>対処法</th></tr></thead><tbody><tr><td><code>JSONDecodeError</code></td><td>書式ミス（クォート忘れなど）</td><td>正しいJSON文字列か確認</td></tr><tr><td><code>TypeError</code></td><td>変換できない型（関数・日付など）</td><td><code>str()</code> や <code>.isoformat()</code>で変換</td></tr><tr><td><code>FileNotFoundError</code></td><td>ファイルが存在しない</td><td>ファイル名やパスを確認</td></tr><tr><td>日本語が文字化け</td><td><code>\uXXXX</code>が出る</td><td><code>ensure_ascii=False</code> を使う</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>「なんでエラーが出るんだろう？」と困ったときは、<strong>まずはエラーメッセージをよく読んで</strong>、ここにあるパターンに当てはまるか見てみてくださいね。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc31">まとめ｜JSONを扱えるとPythonがもっと便利に！</span></h2>



<p>この記事では、PythonでJSONを使うための基本をじっくり解説してきました。</p>



<p>もう一度、ポイントをおさらいしておきましょう！</p>



<ul class="wp-block-list">
<li>**JSONは「データの共通言語」**のようなもの。特にWeb APIや設定ファイルでよく使われます。</li>



<li>Pythonでは <code>json</code> モジュールを使って、<strong>文字列やファイルとしての読み書きが超カンタン</strong>にできます。</li>



<li><code>json.dumps()</code> と <code>json.loads()</code> を使えば、PythonとJSONの相互変換も自由自在！</li>



<li>ファイルで扱うときは <code>json.dump()</code> / <code>json.load()</code> を使って、<strong>きれいに保存したり読み込んだり</strong>できます。</li>



<li>エラーが出たときは、<strong>文字列のクォート・日本語文字化け・型エラー</strong>など、よくあるパターンをチェック！</li>
</ul>



<p>JSONの読み書きができると、<strong>データの保存・通信・設定管理など、いろんな場面でPythonがもっとパワフルに使える</strong>ようになります。ぜひ覚えておきましょう！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc32">あわせて読みたい｜関連するおすすめ記事</span></h3>



<p>PythonでJSONを使いこなすなら、こちらの記事も役立ちます👇</p>



<ul class="wp-block-list">
<li>🔗 <a target="_blank" href="https://python.cbagames.jp/2025/06/11/python-custom-module-howto/">【Python入門】自作モジュールの作り方と使い方を初心者向けにやさしく解説！</a><br>→ プログラムを整理して再利用したいときに便利！</li>



<li>🔗 <a target="_blank" href="https://python.cbagames.jp/2025/06/09/fastapi-basic-usage-guide/">【初心者向け】FastAPIの基本の使い方をやさしく解説</a><br>→ JSONを使ったAPIアプリ開発の第一歩！</li>



<li>🔗 <a target="_blank" href="https://python.cbagames.jp/2025/06/12/python-argparse-basic-guide/">【Python入門】コマンドライン引数をやさしく解説｜argparseモジュール</a><br>→ コマンドラインでJSONファイルを指定したりするときに便利！</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc33">よくある質問（Q&amp;A）</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">JSONと辞書（dict）は同じものですか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>似ていますが、JSONは「文字列として保存・通信できる形式」、辞書は「Python内で使うデータ構造」です。相互に変換できます。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">JSONファイルが読み込めないときは？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>拡張子 <code>.json</code> を忘れていたり、文字コードや書き方にミスがある場合があります。エラー文をよく見て対処しましょう！</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">JSONに日本語を書きたいけど文字化けします。</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p><code>json.dumps()</code> や <code>json.dump()</code> を使うときに、<code>ensure_ascii=False</code> を忘れずに書きましょう！</p>
</div></dd></dl></div>
]]></content:encoded>
					
					<wfw:commentRss>https://python.cbagames.jp/2025/06/13/python-json-module-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Python入門】pathlibの使い方を完全解説｜フォルダー・パス操作が簡単になる方法</title>
		<link>https://python.cbagames.jp/2025/06/13/python-pathlib-beginner-guide/</link>
					<comments>https://python.cbagames.jp/2025/06/13/python-pathlib-beginner-guide/#respond</comments>
		
		<dc:creator><![CDATA[asukapy]]></dc:creator>
		<pubDate>Fri, 13 Jun 2025 02:38:02 +0000</pubDate>
				<category><![CDATA[Python入門]]></category>
		<category><![CDATA[osモジュール比較]]></category>
		<category><![CDATA[pathlib]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[パス操作]]></category>
		<category><![CDATA[ファイル操作]]></category>
		<category><![CDATA[フォルダー管理]]></category>
		<guid isPermaLink="false">https://python.cbagames.jp/?p=275</guid>

					<description><![CDATA[目次 1. はじめに｜ファイルやフォルダー操作、難しくない！🧭 この記事でできるようになること🧒 初心者にもやさしい書き方で解説！2. パスの基本用語をやさしく解説📁 ファイルとフォルダー（ディレクトリー）とは？📍 パス [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10"><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">1. はじめに｜ファイルやフォルダー操作、難しくない！</a><ol><li><a href="#toc2" tabindex="0">🧭 この記事でできるようになること</a></li><li><a href="#toc3" tabindex="0">🧒 初心者にもやさしい書き方で解説！</a></li></ol></li><li><a href="#toc4" tabindex="0">2. パスの基本用語をやさしく解説</a><ol><li><a href="#toc5" tabindex="0">📁 ファイルとフォルダー（ディレクトリー）とは？</a></li><li><a href="#toc6" tabindex="0">📍 パスってなに？</a></li><li><a href="#toc7" tabindex="0">🧭 絶対パスと相対パスのちがい</a></li><li><a href="#toc8" tabindex="0">💡 相対パスで使う記号</a></li><li><a href="#toc9" tabindex="0">🧭 カレントディレクトリーって？</a></li></ol></li><li><a href="#toc10" tabindex="0">3. Pythonで使えるパス操作モジュール3つの比較</a><ol><li><a href="#toc11" tabindex="0">🧱 osモジュール：昔からあるベーシックな方法</a></li><li><a href="#toc12" tabindex="0">🔍 globモジュール：ファイルを検索するのに便利！</a></li><li><a href="#toc13" tabindex="0">🚀 pathlibモジュール：これからの主役！</a></li><li><a href="#toc14" tabindex="0">👑 なぜ初心者にpathlibがおすすめなの？</a></li></ol></li><li><a href="#toc15" tabindex="0">4. pathlibモジュールの基本的な使い方</a><ol><li><a href="#toc16" tabindex="0">① Pathオブジェクトを作ってみよう</a></li><li><a href="#toc17" tabindex="0">② 現在の作業フォルダーを確認してみよう</a></li><li><a href="#toc18" tabindex="0">③ パスをつなげるのもカンタン！</a></li><li><a href="#toc19" tabindex="0">④ 絶対パスを取得する方法</a></li><li><a href="#toc20" tabindex="0">🧪 ここまでのまとめ</a></li></ol></li><li><a href="#toc21" tabindex="0">5. 実践！ファイルやフォルダーの一覧取得</a><ol><li><a href="#toc22" tabindex="0">🔍 フォルダーの中を調べるには .iterdir() を使う！</a></li><li><a href="#toc23" tabindex="0">📝 一覧をまとめてリストにするには？</a></li><li><a href="#toc24" tabindex="0">🧾 ファイル名やフォルダー名だけ欲しいときは？</a></li><li><a href="#toc25" tabindex="0">🧠 文字列に変換するには？</a></li><li><a href="#toc26" tabindex="0">🎯 ここまでのポイントまとめ</a></li></ol></li><li><a href="#toc27" tabindex="0">6. 判別とチェック方法</a><ol><li><a href="#toc28" tabindex="0">📄 .is_file()：ファイルかどうかを確認！</a></li><li><a href="#toc29" tabindex="0">📁 .is_dir()：フォルダーかどうかを確認！</a></li><li><a href="#toc30" tabindex="0">✅ .exists()：存在するかどうかをチェック！</a></li><li><a href="#toc31" tabindex="0">🔒 .is_symlink()：シンボリックリンクかどうかもわかる</a></li><li><a href="#toc32" tabindex="0">🎯 チェック方法まとめ</a></li></ol></li><li><a href="#toc33" tabindex="0">7. 再帰的にファイルを検索する方法</a><ol><li><a href="#toc34" tabindex="0">🔄 glob()とは？</a></li><li><a href="#toc35" tabindex="0">🌟 全部を対象にしたい場合</a></li><li><a href="#toc36" tabindex="0">📄 特定の拡張子だけを検索したい場合</a></li><li><a href="#toc37" tabindex="0">🎯 よく使うパターン文字（ワイルドカード）</a></li><li><a href="#toc38" tabindex="0">🛠 例：特定の画像ファイルだけ探して処理</a></li><li><a href="#toc39" tabindex="0">✨ ここまでのまとめ</a></li></ol></li><li><a href="#toc40" tabindex="0">8. フォルダーやファイルの作成・削除</a><ol><li><a href="#toc41" tabindex="0">📝 ファイルを作成する：.touch()</a><ol><li><a href="#toc42" tabindex="0">ファイルがあってもエラーにしない：exist_ok=True</a></li></ol></li><li><a href="#toc43" tabindex="0">🗑 ファイルを削除する：.unlink()</a><ol><li><a href="#toc44" tabindex="0">ファイルがなくてもエラーにしない：missing_ok=True</a></li></ol></li><li><a href="#toc45" tabindex="0">📁 フォルダーを作成する：.mkdir()</a><ol><li><a href="#toc46" tabindex="0">中の階層まで一気に作りたい場合：parents=True</a></li></ol></li><li><a href="#toc47" tabindex="0">❌ フォルダーを削除する：.rmdir()</a></li><li><a href="#toc48" tabindex="0">🔥 ファイル・フォルダー操作まとめ</a></li></ol></li><li><a href="#toc49" tabindex="0">9. まとめ｜pathlibを使いこなしてPython力アップ！</a><ol><li><a href="#toc50" tabindex="0">💡 pathlibでできるようになったこと</a></li><li><a href="#toc51" tabindex="0">🚀 なぜpathlibがオススメなの？</a></li><li><a href="#toc52" tabindex="0">🎓 さらにレベルアップしたいあなたへ</a></li><li><a href="#toc53" tabindex="0">あわせて読みたい関連記事</a></li></ol></li><li><a href="#toc54" tabindex="0">よくある質問（Q&amp;A）</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">1. はじめに｜ファイルやフォルダー操作、難しくない！</span></h2>



<p>Pythonを学んでいくと、だんだん「このファイルの中身を読みたいな」とか「新しくフォルダーを作って、その中にデータを保存したいな」と思うことが出てきます。<br>でも、**「ファイルとかフォルダーって難しそう…」**って感じていませんか？</p>



<p>実は、Pythonには「pathlib（パスリブ）」という便利な道具があって、それを使うと<strong>ファイルやフォルダーの操作がとってもカンタンになるんです！</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc2">🧭 この記事でできるようになること</span></h3>



<p>この記事では、こんなことができるようになります：</p>



<ul class="wp-block-list">
<li>今作業しているフォルダー（カレントディレクトリー）を確認できる</li>



<li>フォルダーの中に何があるか調べられる</li>



<li>新しくファイルやフォルダーを作れる</li>



<li>ファイルやフォルダーがあるかどうかをチェックできる</li>



<li>フォルダーの中のファイルを一気に一覧で取得できる</li>
</ul>



<p>しかも、全部**「pathlib」モジュール**を使ってサクサク書けるようになります！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc3">🧒 初心者にもやさしい書き方で解説！</span></h3>



<p>Pythonには他にも<code>os</code>や<code>glob</code>といったファイル操作の道具がありますが、今回紹介する<code>pathlib</code>は、<strong>見た目がわかりやすくて、はじめての人にもオススメ</strong>なんです。</p>



<p>たとえば、普通ならパスを文字列で書かなきゃいけないところを、pathlibなら<strong>スラッシュ <code>/</code> を使ってフォルダーをつなげるだけ！</strong><br>ちょっと感動するレベルで簡単になりますよ。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>この記事を読み終えるころには、「あれ？ファイル操作ってこんなにカンタンだったの？」って思ってもらえるはず。<br>Pythonでパソコンの中を自由に動かせるスキルを、楽しく身につけていきましょう！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc4">2. パスの基本用語をやさしく解説</span></h2>



<p>ファイルやフォルダーを操作するには、「パス」という考え方を知っておく必要があります。<br>でも安心してください！イメージしやすく、ていねいに説明していきますね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc5">📁 ファイルとフォルダー（ディレクトリー）とは？</span></h3>



<p>まず、「ファイル」と「フォルダー」について確認しましょう。</p>



<ul class="wp-block-list">
<li><strong>ファイル</strong>：写真、メモ帳、Excelなど、パソコンの中にあるデータそのもののこと。</li>



<li><strong>フォルダー（またはディレクトリー）</strong>：ファイルをまとめて入れておく入れ物のようなもの。</li>
</ul>



<p>たとえば「音楽」というフォルダーの中に「song1.mp3」「song2.mp3」というファイルが入っている、というイメージです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc6">📍 パスってなに？</span></h3>



<p><strong>パス</strong>とは、パソコンの中でファイルやフォルダーがどこにあるかを示す「住所」のようなものです。</p>



<p>例：</p>



<pre class="wp-block-preformatted"><code>C:/Users/ユーザー名/Desktop/sample.txt<br></code></pre>



<p>これは「Cドライブの中の、ユーザー名のフォルダーの中の、デスクトップの中の、sample.txtというファイル」って意味ですね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">🧭 絶対パスと相対パスのちがい</span></h3>



<p>パスには2種類あります。これは超重要なので、しっかりおさえておきましょう！</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>種類</th><th>説明</th><th>例</th></tr></thead><tbody><tr><td><strong>絶対パス</strong></td><td>いちばん上から全部書く</td><td><code>C:/Users/xxx/Desktop/sample.txt</code></td></tr><tr><td><strong>相対パス</strong></td><td>今いる場所からの道だけ書く</td><td><code>./sample.txt</code>（今いる場所にあるsample.txt）</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-point block-box has-border-color has-amber-border-color">
<p>📝 相対パスは「カレントディレクトリー（＝今作業している場所）」を基準に考えます！</p>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc8">💡 相対パスで使う記号</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>記号</th><th>意味</th><th>使い方の例</th></tr></thead><tbody><tr><td><code>.</code></td><td>今いる場所</td><td><code>./data.txt</code>（今の場所にあるファイル）</td></tr><tr><td><code>..</code></td><td>1つ上のフォルダー</td><td><code>../config.json</code>（1つ上の場所にあるファイル）</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc9">🧭 カレントディレクトリーって？</span></h3>



<p><strong>カレントディレクトリー</strong>とは、今Pythonが作業している「場所」のことです。<br>たとえば「デスクトップ」でPythonを実行しているなら、カレントディレクトリーはデスクトップになります。</p>



<p>Pythonではこのカレントディレクトリーを<code>Path.cwd()</code>で調べることができます！</p>



<pre class="wp-block-preformatted"><code>from pathlib import Path<br><br>print(Path.cwd())<br></code></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここまでで、パスの考え方がかなりわかってきたと思います。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc10">3. Pythonで使えるパス操作モジュール3つの比較</span></h2>



<p>Pythonでファイルやフォルダーの場所を調べたり、操作したりするには、いくつかの方法があります。<br>中でもよく使われるのが、次の3つのモジュールです。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>モジュール名</th><th>特徴</th><th>初心者向き度</th></tr></thead><tbody><tr><td><code>os</code></td><td>古くからある基本的な方法</td><td>★★☆（標準的）</td></tr><tr><td><code>glob</code></td><td>ファイルの検索に便利</td><td>★★☆（サブ的に）</td></tr><tr><td><code>pathlib</code></td><td>直感的でモダンな書き方</td><td>★★★（おすすめ！）</td></tr></tbody></table></figure>



<p>それぞれの特徴を見ていきましょう！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc11">🧱 osモジュール：昔からあるベーシックな方法</span></h3>



<p><code>os</code>モジュールは、Pythonでパスやファイルを扱う<strong>伝統的な方法</strong>です。<br>今でも多くのコードで使われていますが、<strong>パスが文字列で表現される</strong>ので、ちょっとわかりにくいこともあります。</p>



<pre class="wp-block-preformatted"><code>import os<br><br>print(os.getcwd())  # カレントディレクトリを表示<br></code></pre>



<p>ファイルのパスを文字列として操作するので、記号の扱いなどで間違えやすいのが難点です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc12">🔍 globモジュール：ファイルを検索するのに便利！</span></h3>



<p><code>glob</code>モジュールは、<strong>特定のパターンに一致するファイルを一括で探す</strong>ときに使います。</p>



<p>たとえば「このフォルダーの中の.txtファイルを全部探してほしい！」というときにぴったり。</p>



<pre class="wp-block-preformatted"><code>import glob<br><br>files = glob.glob("*.txt")<br>print(files)  # ['sample1.txt', 'note.txt'] など<br></code></pre>



<p>ただし、パス操作の「全部」はできないので、<strong>補助的に使う感じ</strong>です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc13">🚀 pathlibモジュール：これからの主役！</span></h3>



<p>そして一番おすすめなのが、今回メインで紹介する <strong><code>pathlib</code>モジュール</strong> です！</p>



<p><code>pathlib</code>では、パスを**「Pathオブジェクト」**という形で扱うため、<strong>スラッシュ(<code>/</code>)で直感的にパスをつなげる</strong>ことができます。<br>まるで本物のフォルダーを操作しているような感覚でコードが書けます。</p>



<pre class="wp-block-preformatted"><code>from pathlib import Path<br><br>path = Path("data") / "sample.txt"<br>print(path)  # data/sample.txt<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc14">👑 なぜ初心者にpathlibがおすすめなの？</span></h3>



<ul class="wp-block-list">
<li><strong>コードが読みやすい＆書きやすい！</strong></li>



<li><strong>エラーが出にくい！</strong></li>



<li><strong>新しいPythonの書き方にピッタリ！</strong></li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>つまり、「これからPythonをちゃんと使いたい！」と思っているなら、<code>pathlib</code>から始めるのが一番の近道です！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc15">4. pathlibモジュールの基本的な使い方</span></h2>



<p>さあ、いよいよ実際にPythonで「pathlib」を使ってみましょう！<br>このセクションでは、<code>pathlib</code>を使ってパス（ファイルやフォルダーの場所）を操作する基本的な方法をやさしく紹介します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc16">① Pathオブジェクトを作ってみよう</span></h3>



<p>まずは、<code>pathlib</code>を使うための準備です。</p>



<pre class="wp-block-preformatted"><code>from pathlib import Path<br></code></pre>



<p>これで <code>Path</code> クラスが使えるようになります！</p>



<p>次に、ファイルやフォルダーのパスを作ってみましょう：</p>



<pre class="wp-block-preformatted"><code>my_path = Path("example.txt")<br>print(my_path)<br></code></pre>



<p>これは「カレントディレクトリーにあるexample.txtというファイル」を表しています。<br>このとき <code>my_path</code> はただの文字列ではなく、<strong>Pathオブジェクト</strong>と呼ばれる特別なものになります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc17">② 現在の作業フォルダーを確認してみよう</span></h3>



<p>今、自分がどのフォルダーにいるか（カレントディレクトリー）を調べたいときは、こうします：</p>



<pre class="wp-block-preformatted"><code>current = Path.cwd()<br>print(current)<br></code></pre>



<p>これで、「今Pythonが作業しているフォルダーの場所」がわかります！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc18">③ パスをつなげるのもカンタン！</span></h3>



<p><code>pathlib</code>のすごいところは、<strong>スラッシュ <code>/</code> を使ってパスをつなげられる</strong>こと！</p>



<pre class="wp-block-preformatted"><code>folder = Path("data")<br>file_path = folder / "sample.txt"<br>print(file_path)  # data/sample.txt<br></code></pre>



<p><code>os.path.join()</code>のようなめんどうな書き方をしなくても、<strong>パズルみたいに直感的にパスを作れる</strong>のがうれしいですね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc19">④ 絶対パスを取得する方法</span></h3>



<p>作ったパスがどこにあるのかをフルパス（絶対パス）で見たいときは、<code>.resolve()</code>を使います。</p>



<pre class="wp-block-preformatted"><code>print(file_path.resolve())<br></code></pre>



<p>これで <code>data/sample.txt</code> の「ちゃんとした場所」が表示されます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc20">🧪 ここまでのまとめ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>操作</th><th>コード例</th></tr></thead><tbody><tr><td>Pathの作成</td><td><code>Path("file.txt")</code></td></tr><tr><td>カレントディレクトリーの取得</td><td><code>Path.cwd()</code></td></tr><tr><td>パスの結合</td><td><code>Path("dir") / "file.txt"</code></td></tr><tr><td>絶対パスの取得</td><td><code>.resolve()</code></td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここまで覚えれば、もうPythonでパスを使った基本操作はバッチリです！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc21">5. 実践！ファイルやフォルダーの一覧取得</span></h2>



<p>Pythonで「このフォルダーの中にどんなファイルやフォルダーがあるか」を調べたいとき、<code>pathlib</code>の出番です！<br>このセクションでは、実際にファイル一覧を取得する方法を紹介します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc22">🔍 フォルダーの中を調べるには .iterdir() を使う！</span></h3>



<p>まずは、ターゲットとなるフォルダーを<code>Path</code>オブジェクトとして作り、それに <code>.iterdir()</code> を使います。</p>



<pre class="wp-block-preformatted"><code>from pathlib import Path<br><br># 調べたいフォルダー<br>target_dir = Path("./sample_folder")<br><br># 一覧を表示<br>for item in target_dir.iterdir():<br>    print(item)<br></code></pre>



<p>このコードを実行すると、<code>sample_folder</code>の中にあるファイルやフォルダーの<strong>パス</strong>が1つずつ表示されます！</p>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-point block-box has-border-color has-amber-border-color">
<p>💡 <code>iterdir()</code> は中身を1個ずつ取り出す「ジェネレーター」という仕組みです。</p>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc23">📝 一覧をまとめてリストにするには？</span></h3>



<p>たとえば「全部まとめて扱いたい！」という場合は、<code>list()</code>でくるんであげましょう。</p>



<pre class="wp-block-preformatted"><code>items = list(target_dir.iterdir())<br>print(items)<br></code></pre>



<p>これで、フォルダーの中にあるファイルやサブフォルダーのリストが手に入ります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc24">🧾 ファイル名やフォルダー名だけ欲しいときは？</span></h3>



<p>そのままだと「Pathオブジェクト」として表示されるので、ファイル名やフォルダー名だけ欲しいときは <code>.name</code> を使います！</p>



<pre class="wp-block-preformatted"><code>for item in target_dir.iterdir():<br>    print(item.name)<br></code></pre>



<p>たとえばこんな感じで出力されます：</p>



<pre class="wp-block-preformatted"><code>file1.txt<br>image.png<br>notes<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc25">🧠 文字列に変換するには？</span></h3>



<p>もしPathオブジェクトを「ただの文字列」として扱いたい場合は <code>str()</code> を使います。</p>



<pre class="wp-block-preformatted"><code>for item in target_dir.iterdir():<br>    print(str(item))<br></code></pre>



<p>これで <code>sample_folder/file1.txt</code> のような形式で表示されます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc26">🎯 ここまでのポイントまとめ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>やりたいこと</th><th>方法</th></tr></thead><tbody><tr><td>フォルダー内の一覧取得</td><td><code>.iterdir()</code></td></tr><tr><td>名前だけ取得</td><td><code>.name</code></td></tr><tr><td>パスを文字列で取得</td><td><code>str(item)</code></td></tr><tr><td>まとめて取得</td><td><code>list(target_dir.iterdir())</code></td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これで、Pythonを使って「フォルダーの中身を一覧で表示する」ことができました！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc27">6. 判別とチェック方法</span></h2>



<p>pathlibを使えば、「これってファイル？フォルダー？」「このファイル、そもそも存在してる？」というチェックもカンタンにできます！<br>ここでは <code>.is_file()</code> や <code>.exists()</code> など、便利な「判別メソッド」を紹介していきますね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc28">📄 .is_file()：ファイルかどうかを確認！</span></h3>



<p>これは<strong>PathがファイルならTrue、違うならFalse</strong>を返してくれます。</p>



<pre class="wp-block-preformatted"><code>from pathlib import Path<br><br>p = Path("sample.txt")<br><br>if p.is_file():<br>    print("これはファイルです！")<br>else:<br>    print("これはファイルではありません。")<br></code></pre>



<p>ファイルが<strong>実際に存在していて</strong>、<strong>ファイル形式である必要があります！</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc29">📁 .is_dir()：フォルダーかどうかを確認！</span></h3>



<p>今度は<strong>Pathがディレクトリー（フォルダー）かどうか</strong>を調べる方法です。</p>



<pre class="wp-block-preformatted"><code>d = Path("my_folder")<br><br>if d.is_dir():<br>    print("これはフォルダーです！")<br>else:<br>    print("これはフォルダーじゃないよ。")<br></code></pre>



<p>もちろん、これも<strong>そのフォルダーがちゃんと存在していないとFalseになります！</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc30">✅ .exists()：存在するかどうかをチェック！</span></h3>



<p>ファイルでもフォルダーでも、とにかく「存在しているかどうか」を調べたいときに便利なのが <code>.exists()</code> です。</p>



<pre class="wp-block-preformatted"><code>p = Path("data.csv")<br><br>if p.exists():<br>    print("存在してます！")<br>else:<br>    print("そんなファイルないよ！")<br></code></pre>



<p>これを使えば、ファイル操作の前に**「このファイルあるかな？」って事前チェック**ができます。エラー防止にもなって安心ですね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc31">🔒 .is_symlink()：シンボリックリンクかどうかもわかる</span></h3>



<p>あまり初心者の方が使う機会は少ないですが、<code>is_symlink()</code>を使えば<strong>ショートカット（リンク）かどうか</strong>も調べられます。</p>



<pre class="wp-block-preformatted"><code>p = Path("shortcut.lnk")<br><br>if p.is_symlink():<br>    print("これはリンクファイルです。")<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc32">🎯 チェック方法まとめ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>チェック内容</th><th>メソッド</th><th>戻り値の例</th></tr></thead><tbody><tr><td>ファイル？</td><td><code>.is_file()</code></td><td>True / False</td></tr><tr><td>フォルダー？</td><td><code>.is_dir()</code></td><td>True / False</td></tr><tr><td>存在する？</td><td><code>.exists()</code></td><td>True / False</td></tr><tr><td>リンク？</td><td><code>.is_symlink()</code></td><td>True / False</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これで、<strong>パスの種類を見分ける方法</strong>と、<strong>存在確認のやり方</strong>がバッチリわかりましたね！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc33">7. 再帰的にファイルを検索する方法</span></h2>



<p>「あるフォルダーの中をぜ〜んぶ調べたい！」「サブフォルダーの中まで見たい！」<br>そんなときに便利なのが、<code>pathlib</code>の <strong><code>.glob()</code> メソッド</strong> です！</p>



<p>ここでは、<strong><code>glob()</code>を使って、フォルダーの中にあるファイルやディレクトリーを再帰的に検索する方法</strong>を紹介します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc34">🔄 glob()とは？</span></h3>



<p><code>glob()</code>は、特定の<strong>パターンに合うファイルやフォルダーをまとめて取得できる関数</strong>です。<br>しかも、<code>**</code> というワイルドカードを使えば、<strong>サブフォルダーの中まで再帰的に検索</strong>できます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc35">🌟 全部を対象にしたい場合</span></h3>



<pre class="wp-block-preformatted"><code>from pathlib import Path<br><br>base = Path("sample_folder")<br><br>for path in base.glob("**/*"):<br>    print(path)<br></code></pre>



<p>このコードで、<code>sample_folder</code>の中にある<strong>すべてのファイルとフォルダー</strong>を表示できます。<br><code>**/*</code>は、「このフォルダー以下のすべて（サブフォルダーも含む）」という意味です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc36">📄 特定の拡張子だけを検索したい場合</span></h3>



<p>たとえば「<code>.txt</code>ファイルだけ見つけたい！」ときはこう書きます：</p>



<pre class="wp-block-preformatted"><code>for txt_file in base.glob("**/*.txt"):<br>    print(txt_file)<br></code></pre>



<p>これで、<strong>どんなに深いフォルダーの中にあっても <code>.txt</code> ファイルだけが見つかります！</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc37">🎯 よく使うパターン文字（ワイルドカード）</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>パターン</th><th>意味</th><th>例</th></tr></thead><tbody><tr><td><code>*</code></td><td>なんでも（1階層内）</td><td><code>"*.csv"</code> は <code>.csv</code>ファイル全部</td></tr><tr><td><code>**</code></td><td>全階層にマッチ（再帰）</td><td><code>"**/*"</code> は全部</td></tr><tr><td><code>?</code></td><td>1文字にマッチ</td><td><code>"file?.txt"</code> は <code>file1.txt</code> や <code>fileA.txt</code></td></tr><tr><td><code>[abc]</code></td><td>どれか1文字</td><td><code>"file[123].txt"</code> は <code>file1.txt</code>, <code>file2.txt</code>, &#8230;</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-point block-box has-border-color has-amber-border-color">
<p>🧠 <code>.glob()</code>の結果も <code>.iterdir()</code>と同じく<strong>ジェネレーター</strong>なので、<code>for</code>文で回すか、<code>list()</code>でまとめましょう。</p>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc38">🛠 例：特定の画像ファイルだけ探して処理</span></h3>



<pre class="wp-block-preformatted"><code>images = list(Path("photos").glob("**/*.png"))<br><br>for img in images:<br>    print(f"画像ファイル見つけたよ：{img.name}")<br></code></pre>



<p>こんな感じで、再帰的なファイル処理が<strong>とてもシンプルに</strong>書けちゃいます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc39">✨ ここまでのまとめ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>やりたいこと</th><th>パターン</th><th>メソッド</th></tr></thead><tbody><tr><td>全部取得したい</td><td><code>"**/*"</code></td><td><code>.glob()</code></td></tr><tr><td><code>.txt</code>だけ取得</td><td><code>"**/*.txt"</code></td><td><code>.glob()</code></td></tr><tr><td><code>.jpg</code>だけ取得</td><td><code>"**/*.jpg"</code></td><td><code>.glob()</code></td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これで、サブフォルダーの中まで含めて<strong>一括でファイルを探すテクニック</strong>がバッチリです！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc40">8. フォルダーやファイルの作成・削除</span></h2>



<p>Pythonと<code>pathlib</code>を使えば、<strong>新しくファイルやフォルダーを作ったり、不要なものを削除する</strong>こともカンタンにできます！<br>このセクションでは、よく使う <code>.touch()</code> や <code>.mkdir()</code>、 <code>.unlink()</code> などを紹介します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc41">📝 ファイルを作成する：.touch()</span></h3>



<p>まずは、空のファイルを作ってみましょう。</p>



<pre class="wp-block-preformatted"><code>from pathlib import Path<br><br>new_file = Path("hello.txt")<br>new_file.touch()<br></code></pre>



<p>このコードを実行すると、「hello.txt」という<strong>空のファイル</strong>が作られます！</p>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-point block-box has-border-color has-amber-border-color">
<p>💡すでにファイルが存在していても <code>.touch()</code> を使うと、タイムスタンプが更新されます（＝更新された扱いになります）。</p>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><span id="toc42">ファイルがあってもエラーにしない：exist_ok=True</span></h4>



<pre class="wp-block-preformatted"><code>new_file.touch(exist_ok=True)<br></code></pre>



<p>このオプションをつけると、<strong>ファイルがすでにあってもエラーになりません</strong>。安心して使えますね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc43">🗑 ファイルを削除する：.unlink()</span></h3>



<p>不要になったファイルは <code>.unlink()</code> で削除できます。</p>



<pre class="wp-block-preformatted"><code>target = Path("hello.txt")<br>target.unlink()<br></code></pre>



<p>これだけで「hello.txt」は消えちゃいます！</p>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-check block-box has-border-color has-light-blue-border-color">
<p>❗ ファイルが存在しないとエラーになるので、削除前に <code>.exists()</code> でチェックしておくのがオススメ！</p>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><span id="toc44">ファイルがなくてもエラーにしない：missing_ok=True</span></h4>



<pre class="wp-block-preformatted"><code>target.unlink(missing_ok=True)<br></code></pre>



<p>このオプションをつけると、ファイルがなかった場合でもエラーが出ません。これも便利！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc45">📁 フォルダーを作成する：.mkdir()</span></h3>



<p>次は、フォルダー（ディレクトリー）を作る方法です。</p>



<pre class="wp-block-preformatted"><code>folder = Path("new_folder")<br>folder.mkdir()<br></code></pre>



<p>これで「new_folder」という名前のフォルダーが作られます！</p>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-point block-box has-border-color has-amber-border-color">
<p>💡 すでに同じ名前のフォルダーがあるとエラーになるので注意！</p>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><span id="toc46">中の階層まで一気に作りたい場合：parents=True</span></h4>



<pre class="wp-block-preformatted"><code>nested = Path("parent/child/grandchild")<br>nested.mkdir(parents=True, exist_ok=True)<br></code></pre>



<p>このようにすれば、途中の「parent」「child」がなくても、<strong>全部まとめて作ってくれます！</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc47">❌ フォルダーを削除する：.rmdir()</span></h3>



<pre class="wp-block-preformatted"><code>folder = Path("new_folder")<br>folder.rmdir()<br></code></pre>



<p>このコードで「new_folder」を削除できますが、<strong>中に何か入っているとエラーになります</strong>。空っぽでないとダメです！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc48">🔥 ファイル・フォルダー操作まとめ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>操作</th><th>メソッド</th><th>注意点</th></tr></thead><tbody><tr><td>ファイル作成</td><td><code>.touch()</code></td><td>空のファイルを作成</td></tr><tr><td>ファイル削除</td><td><code>.unlink()</code></td><td>存在チェック推奨</td></tr><tr><td>フォルダー作成</td><td><code>.mkdir()</code></td><td><code>parents=True</code>で階層対応</td></tr><tr><td>フォルダー削除</td><td><code>.rmdir()</code></td><td>中が空でないと削除できない</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これで、Pythonから<strong>ファイルやフォルダーの作成・削除が自由自在</strong>になりましたね！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc49">9. まとめ｜pathlibを使いこなしてPython力アップ！</span></h2>



<p>ここまで、Pythonの「pathlib」モジュールを使って、<strong>パスの操作やファイル・フォルダーの扱い方</strong>を一緒に学んできました。<br>どうでしたか？ 最初はちょっと難しそうに感じたかもしれませんが、実はとっても直感的で便利だったと思います！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc50">💡 pathlibでできるようになったこと</span></h3>



<p>今回の記事で、あなたはこんなことができるようになりました：</p>



<p>✅ カレントディレクトリーを取得できる<br>✅ パスを自由に組み合わせて作れる<br>✅ フォルダーの中身を一覧で取得できる<br>✅ ファイルやフォルダーの存在確認や種類の判別ができる<br>✅ 再帰的にファイルを検索できる<br>✅ ファイルやフォルダーの作成・削除ができる</p>



<p>これらは、<strong>自動化スクリプト</strong>や<strong>データ処理の前準備</strong>、<strong>ログ管理</strong>など、さまざまな場面で大活躍します！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc51">🚀 なぜpathlibがオススメなの？</span></h3>



<ul class="wp-block-list">
<li><code>/</code> 演算子でパスが直感的に扱える</li>



<li><code>.exists()</code>, <code>.is_file()</code> などの<strong>便利メソッドがいっぱい</strong></li>



<li><strong>オブジェクト指向でミスが少ない</strong></li>



<li><code>os.path</code>よりも読みやすくてPythonっぽい！</li>
</ul>



<p>初心者から上級者まで、<strong>これからPythonを書く人は絶対に覚えておきたい必須モジュール</strong>といっても過言ではありません！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc52">🎓 さらにレベルアップしたいあなたへ</span></h3>



<p>pathlibの応用編としては、</p>



<ul class="wp-block-list">
<li><code>open()</code>との組み合わせでファイル読み書き</li>



<li><code>shutil</code>と連携してファイルコピーや移動</li>



<li>pathlibでの相対パスからの変換・正規化</li>
</ul>



<p>などもあります。興味が出てきたら、次のステップにもどんどん挑戦してみてください！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc53">あわせて読みたい関連記事</span></h3>



<p>pathlibを学んだあとは、関連する他のPython入門記事を読んで、さらに理解を深めましょう！</p>



<ul class="wp-block-list">
<li>🔗 <a target="_blank" href="https://python.cbagames.jp/2025/06/11/python-custom-module-howto/">【Python入門】自作モジュールの作り方と使い方を初心者向けにやさしく解説！</a><br>　→ pathlibで作ったファイルやフォルダーを、自作モジュールで使いたいときに役立ちます。</li>



<li>🔗 <a target="_blank" href="https://python.cbagames.jp/2025/06/10/python-for-useful-functions-tqdm-zip-enumerate/">【Python入門】for文で使える便利関数3選｜tqdm・zip・enumerateの使い方と活用例を解説！</a><br>　→ <code>.iterdir()</code>や<code>.glob()</code>と組み合わせて、for文をもっと便利に！</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc54">よくある質問（Q&amp;A）</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">pathlibはどのバージョンのPythonから使えますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>Python 3.4から標準で使えます。Python 3.10や3.11など、最近のバージョンなら問題ありません。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">osモジュールとpathlib、どっちを使えばいいの？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>これからPythonを学ぶ人には <strong>pathlibが断然おすすめ</strong> です！コードが読みやすく、ミスもしにくいです。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">Pathオブジェクトは文字列じゃないの？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>そのとおりです。<code>Path("file.txt")</code> は「文字列」ではなく「Path型」というオブジェクトです。必要に応じて <code>str()</code> で変換できます。</p>
</div></dd></dl></div>
]]></content:encoded>
					
					<wfw:commentRss>https://python.cbagames.jp/2025/06/13/python-pathlib-beginner-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PythonでCSVやExcelに書き込む方法｜スプレッドシート以外の選択肢も！</title>
		<link>https://python.cbagames.jp/2025/06/05/python-csv-excel-write/</link>
					<comments>https://python.cbagames.jp/2025/06/05/python-csv-excel-write/#respond</comments>
		
		<dc:creator><![CDATA[asukapy]]></dc:creator>
		<pubDate>Thu, 05 Jun 2025 02:42:27 +0000</pubDate>
				<category><![CDATA[自動化スクリプト]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[openpyxl]]></category>
		<category><![CDATA[pandas]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[ファイル操作]]></category>
		<guid isPermaLink="false">https://python.cbagames.jp/?p=106</guid>

					<description><![CDATA[目次 1. はじめに2-1. CSVとは？用途と特徴✅ CSVのメリット🚫 CSVの注意点2-2. csvモジュールでの書き込み手順🔰 サンプルコード：CSVファイルに書き込む📝 コードの解説📂 出力されるCSVファイル [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12"><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">1. はじめに</a></li><li><a href="#toc2" tabindex="0">2-1. CSVとは？用途と特徴</a><ol><li><a href="#toc3" tabindex="0">✅ CSVのメリット</a></li><li><a href="#toc4" tabindex="0">🚫 CSVの注意点</a></li></ol></li><li><a href="#toc5" tabindex="0">2-2. csvモジュールでの書き込み手順</a><ol><li><a href="#toc6" tabindex="0">🔰 サンプルコード：CSVファイルに書き込む</a></li><li><a href="#toc7" tabindex="0">📝 コードの解説</a></li><li><a href="#toc8" tabindex="0">📂 出力されるCSVファイルの中身</a></li></ol></li><li><a href="#toc9" tabindex="0">3-1. Excel操作にはopenpyxlが便利</a><ol><li><a href="#toc10" tabindex="0">✅ openpyxlの特徴</a></li><li><a href="#toc11" tabindex="0">🔧 openpyxlのインストール方法</a></li></ol></li><li><a href="#toc12" tabindex="0">3-2. openpyxlを使った書き込み手順</a><ol><li><a href="#toc13" tabindex="0">🔰 サンプルコード：Excelファイルに書き込み</a></li><li><a href="#toc14" tabindex="0">📝 コードの解説</a></li><li><a href="#toc15" tabindex="0">📁 実際の出力ファイルのイメージ</a></li><li><a href="#toc16" tabindex="0">🧠 ワンポイントアドバイス</a></li></ol></li><li><a href="#toc17" tabindex="0">4. pandasを使ってCSVやExcelに書き込む方法（応用編）</a><ol><li><a href="#toc18" tabindex="0">✅ pandasのインストール</a></li><li><a href="#toc19" tabindex="0">🔰 サンプルコード：CSVに書き出す</a></li><li><a href="#toc20" tabindex="0">📝 ポイント解説（CSV出力）</a></li><li><a href="#toc21" tabindex="0">🔰 サンプルコード：Excelに書き出す</a></li><li><a href="#toc22" tabindex="0">🔄 上書き・追記の注意点</a></li></ol></li><li><a href="#toc23" tabindex="0">5. CSV・Excel以外の書き込み先はある？</a><ol><li><a href="#toc24" tabindex="0">✅ JSONファイル｜構造化データに便利</a></li><li><a href="#toc25" tabindex="0">✅ SQLite｜軽量なデータベースに保存</a></li><li><a href="#toc26" tabindex="0">✅ Googleスプレッドシート｜クラウド共有に最適</a></li><li><a href="#toc27" tabindex="0">🧭 選択肢のまとめ</a></li></ol></li><li><a href="#toc28" tabindex="0">6. まとめ｜目的に合った保存形式を選ぼう</a><ol><li><a href="#toc29" tabindex="0">✅ おさらい：書き込み方法まとめ</a></li><li><a href="#toc30" tabindex="0">🧩 保存形式の選び方</a></li></ol></li><li><a href="#toc31" tabindex="0">よくある質問（Q&amp;A）</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">1. はじめに</span></h2>



<p>Pythonでデータを処理できるようになると、「処理した結果をどこかに保存したいな」と思うことが増えてきますよね。<br>そんなとき、よく使われるのが<strong>CSVファイル</strong>や**Excelファイル（.xlsx）**です。</p>



<p>たとえば、次のようなシーンで役立ちます：</p>



<ul class="wp-block-list">
<li>Webスクレイピングで取得したデータをCSVにまとめたい</li>



<li>毎月の売上データをExcelに自動で出力したい</li>



<li>社内で共有するために決まったフォーマットのファイルを生成したい</li>
</ul>



<p>Googleスプレッドシートも便利ですが、「インターネット接続がない環境」や「社内でファイル共有がメインの職場」では、<strong>ローカルファイル形式（CSVやExcel）の方が使い勝手がいい</strong>ことも多いです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>また、CSVやExcelはWindowsやMacなど**どの環境でも読み書きできる「万能フォーマット」**です。<br>Pythonから簡単に出力できるので、<strong>自動化や業務効率化にもピッタリ</strong>なんですよ。</p>



<p>この記事では、Python初心者でも迷わず使えるように、次のポイントをやさしく解説していきます。</p>



<ul class="wp-block-list">
<li><code>csv</code>モジュールを使ってCSVファイルに書き込む方法</li>



<li><code>openpyxl</code>を使ってExcelファイルに書き込む方法</li>



<li>pandasを使った効率的なデータ出力の方法</li>



<li>CSV・Excel以外の選択肢（JSONやSQLiteなど）</li>
</ul>



<p>「スプレッドシート以外の選択肢も知りたい！」という方にもおすすめの内容になっています。<br>それではさっそく、CSVファイルの書き込みから見ていきましょう！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc2">2-1. CSVとは？用途と特徴</span></h2>



<p>まずはCSVについてざっくり説明しておきましょう！</p>



<p><strong>CSV（カンマ区切り値／Comma-Separated Values）ファイル</strong>とは、データを<strong>カンマ（,）で区切って並べたテキストファイル</strong>のことです。<br>拡張子は「<code>.csv</code>」で、テキストエディタでもExcelでも簡単に開くことができます。</p>



<p>たとえば、次のような形式がCSVです：</p>



<pre class="wp-block-preformatted"><code>名前,年齢,職業<br>田中太郎,28,エンジニア<br>佐藤花子,35,デザイナー<br></code></pre>



<h3 class="wp-block-heading"><span id="toc3">✅ CSVのメリット</span></h3>



<ul class="wp-block-list">
<li><strong>ファイルサイズが軽い</strong>：中身はただのテキストなので軽量。</li>



<li><strong>読みやすい＆扱いやすい</strong>：エクセルやGoogleスプレッドシートで開ける。</li>



<li><strong>他システムとの連携がしやすい</strong>：多くのアプリやサービスがCSVをサポート。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc4">🚫 CSVの注意点</span></h3>



<ul class="wp-block-list">
<li>セルの結合やグラフなど<strong>Excelの高度な機能は使えない</strong></li>



<li>カンマや改行が入ったデータは<strong>エスケープ処理</strong>が必要になることもある</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>つまり、「<strong>シンプルなデータ保存ややり取りには最適だけど、装飾はできない</strong>」というのがCSVの特徴です。<br>次は、このCSVファイルに<strong>Pythonで書き込む基本の方法</strong>を解説します！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc5">2-2. csvモジュールでの書き込み手順</span></h2>



<p>Pythonには、CSVファイルを扱うための<strong>標準モジュール <code>csv</code></strong> が用意されています。<br>つまり、<strong>追加でライブラリをインストールしなくてもすぐに使える</strong>んです！</p>



<p>ここでは、CSVファイルにデータを書き込む基本的な方法を紹介します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc6">🔰 サンプルコード：CSVファイルに書き込む</span></h3>



<pre class="wp-block-preformatted"><code>import csv<br><br># 書き込むデータ（リストのリスト形式）<br>data = [<br>    ["名前", "年齢", "職業"],<br>    ["田中太郎", 28, "エンジニア"],<br>    ["佐藤花子", 35, "デザイナー"]<br>]<br><br># ファイルを開いて書き込む<br>with open("sample.csv", "w", newline="", encoding="utf-8") as file:<br>    writer = csv.writer(file)<br>    writer.writerows(data)<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">📝 コードの解説</span></h3>



<ul class="wp-block-list">
<li><code>open("sample.csv", "w", newline="", encoding="utf-8")</code>:<br>CSVファイルを「書き込みモード（<code>w</code>）」で開いています。文字コードは日本語対応の<code>utf-8</code>。<br><code>newline=""</code>は、Windows環境で<strong>改行が2重になるのを防ぐ</strong>ための対策です。</li>



<li><code>csv.writer(file)</code>:<br><code>writer</code>オブジェクトを作成します。これを使ってデータを書き込みます。</li>



<li><code>writer.writerows(data)</code>:<br>リストのリスト形式（2次元）で渡すと、<strong>1行ずつ自動で書き込んでくれる</strong>便利な関数です。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc8">📂 出力されるCSVファイルの中身</span></h3>



<pre class="wp-block-preformatted"><code>名前,年齢,職業<br>田中太郎,28,エンジニア<br>佐藤花子,35,デザイナー<br></code></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Excelで開けば、ちゃんと行と列に分かれた表形式で表示されますよ！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc9">3-1. Excel操作にはopenpyxlが便利</span></h2>



<p>CSVはとってもシンプルで使いやすいんですが、<br>「セルの装飾をしたい」「複数のシートを使いたい」「関数やグラフも含めたい」<br>──そんなときに出番なのが<strong>Excel（.xlsx）形式</strong>です！</p>



<p>PythonでExcelファイルを操作するには、<strong><code>openpyxl</code>というライブラリ</strong>がよく使われます。<br>Microsoft Excel 2007以降で使われている「.xlsx形式」に対応していて、セルの装飾や数式の設定もできます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc10">✅ openpyxlの特徴</span></h3>



<ul class="wp-block-list">
<li>Excelのセルに<strong>自由にデータを書き込める</strong></li>



<li><strong>行や列の挿入／削除、スタイル変更、グラフ挿入</strong>なども可能</li>



<li><code>.xlsx</code>ファイルを<strong>新規作成も編集もOK！</strong></li>



<li>Excelをインストールしていなくても使える</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc11">🔧 openpyxlのインストール方法</span></h3>



<p>まずは、まだインストールしていない場合は次のコマンドで導入しましょう。</p>



<pre class="wp-block-preformatted"><code>pip install openpyxl<br></code></pre>



<p>数秒で完了します！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc12">3-2. openpyxlを使った書き込み手順</span></h2>



<p><code>openpyxl</code>を使えば、Excelのセルに<strong>自由にデータを書き込むことができます。</strong><br>ここでは、新しいExcelファイルを作って、データを入力して保存するまでの流れを見ていきましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc13">🔰 サンプルコード：Excelファイルに書き込み</span></h3>



<pre class="wp-block-preformatted"><code>from openpyxl import Workbook<br><br># 新しいワークブック（Excelファイル）を作成<br>wb = Workbook()<br><br># アクティブなワークシートを取得<br>ws = wb.active<br><br># シート名を変更（任意）<br>ws.title = "社員名簿"<br><br># データの書き込み（行単位で指定）<br>ws.append(["名前", "年齢", "部署"])<br>ws.append(["田中太郎", 28, "開発"])<br>ws.append(["佐藤花子", 35, "デザイン"])<br><br># ファイルとして保存<br>wb.save("sample.xlsx")<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc14">📝 コードの解説</span></h3>



<ul class="wp-block-list">
<li><code>Workbook()</code>：新しいExcelファイル（ワークブック）を作成します。</li>



<li><code>wb.active</code>：デフォルトのワークシート（Sheet）を取得します。</li>



<li><code>ws.append(...)</code>：行単位でデータを追加できます。リスト形式で渡すだけでOK！</li>



<li><code>wb.save("ファイル名.xlsx")</code>：Excelファイルとして保存します。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc15">📁 実際の出力ファイルのイメージ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>名前</th><th>年齢</th><th>部署</th></tr></thead><tbody><tr><td>田中太郎</td><td>28</td><td>開発</td></tr><tr><td>佐藤花子</td><td>35</td><td>デザイン</td></tr></tbody></table></figure>



<p>このファイルをExcelで開くと、ちゃんと整った表になっています！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc16">🧠 ワンポイントアドバイス</span></h3>



<p>複数のシートに書き込みたいときはこうします：</p>



<pre class="wp-block-preformatted"><code>ws2 = wb.create_sheet(title="売上データ")<br>ws2.append(["日付", "金額"])<br></code></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Excelらしい機能もいろいろ追加できますが、まずはこの基本をマスターしておけばOKです！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc17">4. pandasを使ってCSVやExcelに書き込む方法（応用編）</span></h2>



<p>ここまで標準モジュールや<code>openpyxl</code>を使った方法を紹介してきましたが、<br>**もっとスマートにデータを書き込みたい！**という方におすすめなのが「<strong>pandas（パンダス）</strong>」です。</p>



<p>pandasを使えば、データを**DataFrame（表形式のデータ構造）**にまとめて、<br>たった1行でCSVやExcelファイルに書き出すことができます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc18">✅ pandasのインストール</span></h3>



<p>まだインストールしていない場合は、次のコマンドで導入しておきましょう：</p>



<pre class="wp-block-preformatted"><code>pip install pandas openpyxl<br></code></pre>



<p>※Excel出力のために<code>openpyxl</code>も一緒に入れておきます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc19">🔰 サンプルコード：CSVに書き出す</span></h3>



<pre class="wp-block-preformatted"><code>import pandas as pd<br><br># データフレームの作成<br>data = {<br>    "名前": ["田中太郎", "佐藤花子"],<br>    "年齢": [28, 35],<br>    "部署": ["開発", "デザイン"]<br>}<br>df = pd.DataFrame(data)<br><br># CSVファイルに出力<br>df.to_csv("pandas_sample.csv", index=False, encoding="utf-8")<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc20">📝 ポイント解説（CSV出力）</span></h3>



<ul class="wp-block-list">
<li><code>index=False</code>：行番号（インデックス）をCSVに含めないようにするオプション</li>



<li><code>encoding="utf-8"</code>：文字化け防止（特に日本語のデータを扱うとき）</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc21">🔰 サンプルコード：Excelに書き出す</span></h3>



<pre class="wp-block-preformatted"><code># Excelファイルに出力<br>df.to_excel("pandas_sample.xlsx", index=False)<br></code></pre>



<p>たったこれだけで、Excelファイルが出力されます。<br>複雑な書式設定はできませんが、「とりあえず表にして保存したい！」という用途ならこれで十分です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc22">🔄 上書き・追記の注意点</span></h3>



<ul class="wp-block-list">
<li><code>to_csv()</code>や<code>to_excel()</code>は<strong>ファイルを上書き保存</strong>します。</li>



<li>追記（append）したい場合は、いったんファイルを読み込んでから<code>concat()</code>などで合成して保存しましょう。</li>
</ul>



<pre class="wp-block-preformatted"><code># ファイルを読み込み、既存データに新しいデータを結合<br>existing = pd.read_csv("pandas_sample.csv")<br>new_data = pd.DataFrame({"名前": ["山田太一"], "年齢": [30], "部署": ["営業"]})<br>combined = pd.concat([existing, new_data], ignore_index=True)<br>combined.to_csv("pandas_sample.csv", index=False, encoding="utf-8")<br></code></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>pandasはこのように、データ分析にも保存処理にも便利な「万能ツール」です。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc23">5. CSV・Excel以外の書き込み先はある？</span></h2>



<p>ここまで、CSVとExcelへの書き込み方法を紹介してきましたが、<br>実はPythonでは<strong>それ以外にもデータの保存先がたくさん</strong>あるんです！</p>



<p>「CSVやExcelだと扱いづらいな…」と思ったときは、ぜひ以下の選択肢も検討してみてください。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc24">✅ JSONファイル｜構造化データに便利</span></h3>



<p>JSON（JavaScript Object Notation）は、辞書やリストのような<strong>ネストされたデータ構造をそのまま保存</strong>できるのが特徴。</p>



<pre class="wp-block-preformatted"><code>import json<br><br>data = {"名前": "田中太郎", "年齢": 28, "部署": "開発"}<br><br>with open("data.json", "w", encoding="utf-8") as f:<br>    json.dump(data, f, ensure_ascii=False, indent=2)<br></code></pre>



<ul class="wp-block-list">
<li><strong>見た目がきれいで読みやすい</strong></li>



<li><strong>APIやWebサービスと相性が良い</strong></li>



<li>Excelでの編集はできないが、プログラム間でのやり取りに最適</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc25">✅ SQLite｜軽量なデータベースに保存</span></h3>



<p>もしデータがどんどん増えるような場合や、検索やフィルタ機能が必要なら、**SQLite（組み込み型データベース）**が便利です。</p>



<pre class="wp-block-preformatted"><code>import sqlite3<br><br>conn = sqlite3.connect("example.db")<br>cur = conn.cursor()<br><br>cur.execute("CREATE TABLE IF NOT EXISTS users (name TEXT, age INTEGER, department TEXT)")<br>cur.execute("INSERT INTO users VALUES (?, ?, ?)", ("田中太郎", 28, "開発"))<br><br>conn.commit()<br>conn.close()<br></code></pre>



<ul class="wp-block-list">
<li>データベース操作が可能（検索、更新、削除）</li>



<li><code>.db</code>ファイル1つで完結する</li>



<li>Pythonからの操作もとても簡単</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc26">✅ Googleスプレッドシート｜クラウド共有に最適</span></h3>



<p>「複数人でリアルタイムに編集したい」「社内で共有したい」という場合は、Googleスプレッドシートが有力な選択肢。</p>



<p>👉 詳しくは：<a target="_blank" href="https://python.cbagames.jp/2025/06/04/python-google-spreadsheet-gspread/">PythonでGoogleスプレッドシートを操作する方法</a>をご覧ください！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc27">🧭 選択肢のまとめ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>保存先</th><th>特徴</th><th>向いている用途</th></tr></thead><tbody><tr><td>CSV</td><td>シンプル・軽量</td><td>表形式の基本データの保存</td></tr><tr><td>Excel（xlsx）</td><td>装飾やシート分けができる</td><td>見た目も大事な帳票やレポート</td></tr><tr><td>JSON</td><td>ネスト構造に対応</td><td>構造化データの保存やAPI連携</td></tr><tr><td>SQLite</td><td>検索や管理がしやすい</td><td>アプリ内データ保存や大量データ管理</td></tr><tr><td>スプレッドシート</td><td>クラウドで共有・自動化しやすい</td><td>社内共有、自動レポート生成</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>目的や環境に合わせて、<strong>最適な保存形式を選ぶことが業務効率化のカギ</strong>になります！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc28">6. まとめ｜目的に合った保存形式を選ぼう</span></h2>



<p>この記事では、PythonでデータをCSVやExcelに書き込む方法を中心に紹介してきました。<br>さらに、JSONやSQLite、Googleスプレッドシートなどの<strong>他の保存形式</strong>も取り上げました。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc29">✅ おさらい：書き込み方法まとめ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>形式</th><th>主な方法</th><th>特徴</th></tr></thead><tbody><tr><td><strong>CSV</strong></td><td><code>csv</code>モジュール、<code>pandas</code></td><td>軽量・シンプルで汎用性あり</td></tr><tr><td><strong>Excel（.xlsx）</strong></td><td><code>openpyxl</code>、<code>pandas</code></td><td>装飾や複数シート対応、見た目が整えられる</td></tr><tr><td><strong>JSON</strong></td><td><code>json</code>モジュール</td><td>ネストされたデータも保存できる</td></tr><tr><td><strong>SQLite</strong></td><td><code>sqlite3</code>モジュール</td><td>データベース操作が可能、大量データに強い</td></tr><tr><td><strong>スプレッドシート</strong></td><td><code>gspread</code>などの外部ライブラリ</td><td>クラウド連携、自動化、複数人での同時編集OK</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc30">🧩 保存形式の選び方</span></h3>



<ul class="wp-block-list">
<li><strong>簡単な表を保存したい</strong> → CSV</li>



<li><strong>Excelで資料を配りたい・整えたい</strong> → Excel</li>



<li><strong>構造化されたデータを保存したい</strong> → JSON</li>



<li><strong>本格的なデータベースとして活用したい</strong> → SQLite</li>



<li><strong>社内共有・自動レポートに使いたい</strong> → Googleスプレッドシート</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Pythonにはいろいろな保存方法があるからこそ、**「何のために保存したいのか？」**を明確にすると、最適な手段が見えてきます。</p>



<p>この機会にぜひ、自分の目的にぴったりな方法を見つけて、日々の業務や学習をもっとラクにしていきましょう！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc31">よくある質問（Q&amp;A）</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">CSVとExcelの違いって何？どちらを使えばいいの？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p><strong>CSV</strong>はただのテキストファイルで、軽量で汎用性があります。一方、**Excel（.xlsx）**は装飾や数式、複数シートなどの機能を持つ高機能なファイル形式です。</p>



<ul class="wp-block-list">
<li>見た目を整えたい → <strong>Excel</strong></li>



<li>軽くてシンプルな保存がしたい → <strong>CSV</strong></li>
</ul>



<p>どちらを選ぶかは「誰に渡すか・どう使うか」で決めましょう。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">pandasで保存したCSVファイルが文字化けします…</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p><code>to_csv()</code>で日本語を含むCSVを保存する場合、**<code>encoding="utf-8-sig"</code>**と指定すると、Excelでの文字化けを防げます。</p>



<pre class="wp-block-preformatted"><code>df.to_csv("file.csv", index=False, encoding="utf-8-sig")</code></pre>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">Excelファイルに追記したい場合はどうすればいい？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p><code>openpyxl</code>で既存のExcelファイルを開いて、そこにデータを追加できます：</p>



<pre class="wp-block-preformatted"><code>from openpyxl import load_workbook<br><br>wb = load_workbook("sample.xlsx")<br>ws = wb.active<br>ws.append(["新しい行のデータ"])<br>wb.save("sample.xlsx")</code></pre>
</div></dd></dl></div>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://python.cbagames.jp/2025/06/05/python-csv-excel-write/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
