Python入門
CSV読み込みとopen()関数とwith文

Pythonの初心者向け入門解説、人気のプログラミング言語Python
公開日:2020-09-28 最終更新日:2020-09-29

第21回.CSV読み込みとopen()関数とwith文


Python CSV open()関数 with文

Pythonの標準ライブラリのcsvを使いCSVファイルを読み込みます。
ファイルをオープンするにはopen()関数を使いますが、このときwith文を使うととても便利です。


open()関数の仕様を確認してから、with文の使い方、そしてCSVの読み込みと順に解説していきます。

目次

open()関数

ファイルを開き、対応するファイルオブジェクトを返します。
公式ドキュメント - open()
公式ドキュメント - 7.2. ファイルを読み書きする
公式ドキュメント - 7.2.1. ファイルオブジェクトのメソッド

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

file
開くファイルの (絶対または現在のワーキングディレクトリに対する相対) パス名を与えます。
または、ラップするファイルの整数のファイルディスクリプタです。

※PowerShellまたはコマンド プロンプトで実行する場合に、相対パスでは上手く読み込めない場合は絶対パスを指定してください。

mode
mode はオプションの文字列で、ファイルが開かれるモードを指定します。
指定可能なモードは次の表の通りです。

文字 意味
'r' 読み込み用に開く (デフォルト)
'w' 書き込み用に開き、まずファイルを切り詰める
'x' 排他的な生成に開き、ファイルが存在する場合は失敗する
'a' 書き込み用に開き、ファイルが存在する場合は末尾に追記する
'b' バイナリモード
't' テキストモード (デフォルト)
'+' open for updating (reading and writing)

encoding
ファイルのエンコードやデコードに使われる text encoding の名前です。
このオプションはテキストモードでのみ使用してください。

Codec 別名
shift_jis csshiftjis, shiftjis, sjis, s_jis
shift_jis_2004 shiftjis2004, sjis_2004, sjis2004
shift_jisx0213 shiftjisx0213, sjisx0213, s_jisx0213
utf_32 U32, utf32
utf_32_be UTF-32BE
utf_32_le UTF-32LE
utf_16 U16, utf16
utf_16_be UTF-16BE
utf_16_le UTF-16LE
utf_7 U7, unicode-1-1-utf-7
utf_8 U8, UTF, utf8, cp65001
utf_8_sig ※UTF-8(BOM付き)

上記以外は、公式ドキュメント - 標準エンコーディング

その他の引数
errors,newline,closefd,opener
公式ドキュメント - open() をご覧ください。


open()関数の使用例

Python CSV open()関数 with文
Windowsのメモ帳で開いた「file01.csv」です。
UTF-8(BOMなし)です。
f = open("./test/file01.csv", "r", encoding="utf-8")
print(f.read())
f.close()
Python CSV open()関数 with文


with文

ブロックの実行を事前に定義されたメソッドでラップします。
ブロックの前後でコードの初期化と終了処理が実行されます。
公式ドキュメント - with文

基本構文

with expression [as variable]:
    with-block
with-blockが呼び出される前にセットアップコードを実行出来ます。
with-blockの実行が終了後に、ブロックが例外を送出する場合であってもクリーンアップコードが実行できます。

フィルを開くopen()関数はwith文に対応しているので、これを使う事で確実にファイルを閉じることができます。

with文の使用例

with open("./test/file01.csv", "r", encoding="utf-8") as f:
    print(f.read())
print(f.closed)
Python CSV open()関数 with文

withブロックの終了後はファイルが閉じられている事が確認できます。


csvの読み込み

Pythonの標準ライブラリにcsvがあります。
これを使う事で簡単にcsvファイルを扱う事が出来ます。
公式ドキュメント - csv --- CSV ファイルの読み書き

csv.reader(csvfile, dialect='excel', **fmtparams)
与えられたcsvファイル内の行を反復処理するような readerオブジェクトを返します。
csvファイルはイテレータ プロトコルをサポートしています。

csvモジュールの詳細については、次回の「第22回.CSV読み書き(csvモジュール)」で説明します。
・csvモジュールの仕様 ・dialectについて ・**fmtparamsについて ・CSV読み込みの基本 ・CSV書き込みの基本 ・フォルダ内の複数CSVを1つのCSVにまとめる
今回は、簡単にCSVファイルを読み込むスクリプトを紹介します。

Python CSV open()関数 with文
Windowsのメモ帳で開いた「file01.csv」です。
UTF-8(BOMなし)です。

1行ずつ処理(print)する

import csv
with open("./test/file01.csv", "r", encoding="utf-8") as f: reader = csv.reader(f) for row in reader: print(row)
Python CSV open()関数 with文

readerはイテレータをサポートしているので、for文で1行ずつ取り出してprintしています。

2次元配列に取り込む

from pprint import pprint
import csv
with open("./test/file01.csv", "r", encoding="utf-8") as f: reader = csv.reader(f) row = [r for r in reader] pprint(row, width=20)
Python CSV open()関数 with文

リスト内包表記を使い、readerから1行ずつ取り出したものをリスト化しています。

pprint

Pythonの任意のデータ構造をインタープリタへの入力で使われる形式にして "pretty-print" できます。
公式ドキュメント - pprint --- データ出力の整然化
pprint.pprint(object, stream=None, indent=1, width=80, depth=None, *, compact=False, sort_dicts=True)

オブジェクトのフォーマットされた表現をストリームに出力し、その後に改行を続けます。

先のスクリプトではwidth=20と指定しましたが、これは既定の80では1行に収まってしまう為です。
今回のサンプルデータであれば数値は適当な数値で(30でも40でも)構いません。


tsvの読み込み

Python CSV open()関数 with文
Windowsのメモ帳で開いた「file01.txt」です。
ANSI(shift-jis)です。
from pprint import pprint
import csv
with open("./test/file01.txt", "r", encoding="shift-jis") as f: reader = csv.reader(f, delimiter="\t") row = [r for r in reader] pprint(row, width=20)
Python CSV open()関数 with文

csv.readerにdelimiter="\t"(タブ)を指定しています。
スペース区切りなら、delimiter=" "と指定します。




同じテーマ「Python入門」の記事

第16回.Pythonの引数は参照渡しだが・・・
第17回.リスト内包表記
第18回.例外処理(try文)とexception一覧
第19回.import文(パッケージ・モジュールのインポート)
第20回.フォルダとファイルの一覧を取得(os,glob,pathlib)
第21回.CSV読み込みとopen()関数とwith文
第22回.CSV読み書き(csvモジュール)
第23回.pipコマンド(外部ライブラリのインストール)
第24回.エクセルを操作する(openpyxl)
第24回.エクセルを操作する(pywin32:win32com)
第26回.WEBスクレイピング(selenium)


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ