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 ・・・新着記事一覧を見る

TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門




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


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


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