この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
|
プログラミング:python:基本:ファイル処理 [2020/07/05 14:51] sotoyama 作成 |
プログラミング:python:基本:ファイル処理 [2020/07/05 22:45] (現在) sotoyama [CSVの読み書き] |
||
|---|---|---|---|
| ライン 1: | ライン 1: | ||
| ===== ファイル処理 ===== | ===== ファイル処理 ===== | ||
| + | ==== 基本形 ==== | ||
| + | 基本形2の場合、withブロックの終了時、暗黙的にclose()が実行されため、close()の呼び出しが不要となる。 | ||
| + | <code python> | ||
| + | # 基本形1 | ||
| + | f = open("ファイル名", "モード") # ファイルオープン | ||
| + | l = f.readlines() # ファイル操作 | ||
| + | f.close() # ファイルクローズ | ||
| + | # 基本形2 | ||
| + | with open("ファイル名", "モード") as f # ファイルオープン | ||
| + | l = f.readlines() # ファイル操作 | ||
| + | </code> | ||
| + | === モード === | ||
| + | 省略した場合、"rt"が適用される | ||
| + | ^ モード ^ 説明 ^ | ||
| + | | r | 読み込み。 | | ||
| + | | w | 書き込み。 | | ||
| + | | x | 新規作成。ファイルが存在する場合、エラーとなる。 | | ||
| + | | a | 追記書き込み。 | | ||
| + | | + | 読み書き両方。 | | ||
| + | | t | テキストファイル。r,w,x,a,+と組み合わせて指定。 | | ||
| + | | b | バイナリファイル。r,w,x,a,+と組み合わせて指定。 | | ||
| + | === encodingオプション === | ||
| + | PythonはUTF-8をデフォルトとする。UTF-8以外の文字コードを読み込む場合はeoncodingオプションを指定する。 | ||
| + | ^ 値 ^ 別名 ^ 説明 ^ | ||
| + | | shift_jis | shiftjisi, sjis | シフトJIS | | ||
| + | | cp932 | 932, ms932, mskanji, ms-kanji | Windows用のシフトJIS | | ||
| + | | euc-jp | eucjp, ujis, u-jis | EUC-JP | | ||
| + | | iso2022_jp | iso2022jp, iso-2022-jp | JIS | | ||
| + | <code python> | ||
| + | with open("test.txt", encoding='shift-jis') as f: | ||
| + | l = f.readlines() | ||
| + | </code> | ||
| + | === newlineオプション === | ||
| + | newlineオプションにより、改行コードを指定することができる。 | ||
| + | ^ 値 ^ 説明 ^ | ||
| + | | \r | CR | | ||
| + | | \n | LF | | ||
| + | | \r\n | CRLF | | ||
| + | <code python> | ||
| + | with open("test.txt", encoding='shift-jis', newline='\r\n') as f: | ||
| + | l = f.readlines() | ||
| + | </code> | ||
| + | |||
| + | |||
| + | ==== ファイル操作メソッド ==== | ||
| + | |||
| + | ^ メソッド ^ 説明 ^ | ||
| + | | read() | 終端まで読み込む。 | | ||
| + | | read(長さ) | 指定した長さだけ読み込む。 | | ||
| + | | readline() | 1行読み込む。 | | ||
| + | | readline(長さ) | 指定した長さだけ1行読み込む。 | | ||
| + | | readlines() | 1行ずつリストにし、全量読み込む。 | | ||
| + | | seek(先頭からの位置) | 指定した場所に読み込み位置を移動する。 | | ||
| + | | tell() | 現在の読み込み位置を取得する。 | | ||
| + | | truncate(長さ) | ファイルを指定した長さに切り捨てる。長さ省略時、ファイルの内容を全削除する。 | | ||
| + | | write(データ) | データを書き込む。 | | ||
| + | | writelines(リスト) | リストで構成されたデータを書き込む。 | | ||
| + | |||
| + | === 読み込み === | ||
| - | ==== コメント ==== | ||
| - | #記号やヒアドキュメントを使用する。 | ||
| <code python> | <code python> | ||
| - | # 1行コメント | + | # 1行毎にリストにして読み込み |
| - | a = 1 # 行の途中からコメントにすることも可能 | + | with open("test.txt") as f: |
| + | l = f.readlines() | ||
| - | """ | + | print(l) |
| - | ヒアドキュメントを変数に代入しないことで | + | |
| - | コメント扱いにすることが可能。 | + | |
| - | """ | + | |
| + | # 1行ずつ読み込み | ||
| + | with open("test.txt") as f: | ||
| + | while True: | ||
| + | l = f.readline() | ||
| + | print(l) | ||
| + | if not l: | ||
| + | break | ||
| </code> | </code> | ||
| - | ==== 命令文の終了 ==== | ||
| - | 命令文の終了はセミコロン(;)を使用する。 | + | === 書き込み === |
| <code python> | <code python> | ||
| - | a = 1; b = 2; c = 3; | + | #書き込み |
| - | d = 4 # 1行に1命令の場合、省略可能 | + | with open("test.txt", "w") as f: |
| + | f.write("abc\n") | ||
| </code> | </code> | ||
| - | ==== 演算子 ==== | + | ==== CSVの読み書き ==== |
| - | ^ 分類 ^ 種類 ^ 演算子 ^ 使用例 ^ | + | === 読み込み === |
| - | | 代入演算子 | 加算 | += | a += b | | + | |
| - | | ::: | 減算 | -= | a -= b | | + | |
| - | | ::: | 乗算 | *= | a *= b | | + | |
| - | | ::: | 除算 | /= | a /= b | | + | |
| - | | ::: | 除算(小数点以下切り捨て) | %%//=%% | %%a //= b%% | | + | |
| - | | ::: | 剰余 | %= | a %= b | | + | |
| - | | ::: | べき乗 | %%**=%% | %%a **= b%% | | + | |
| - | | 比較演算子 | 超過 | > | a > b | | + | |
| - | | ::: | 未満 | < | a < b | | + | |
| - | | ::: | 以上 | >= | a >= b | | + | |
| - | | ::: | 以下 | %%<=%% | a %%<=%% b | | + | |
| - | | ::: | 同値 | == | a == b | | + | |
| - | | ::: | 異なる値 | != | a != b | | + | |
| - | | 論理演算子 | 論理積 | %%and%% | (a > b) %%and%% (b < c) | | + | |
| - | | ::: | 論理和 | %%or%% | (a > b) %%or%% (b < c) | | + | |
| - | | ::: | 否定 | not | not(a < b) | | + | |
| - | | ビット演算子 | 論理積 | %%&%% | a %%&%% b | | + | |
| - | | ::: | 論理和 | %%|%% | a %%|%% b | | + | |
| - | | ::: | 排他的論理和 | %%^%% | a %%^%% b | | + | |
| - | | ::: | ビット反転 | ~ | ~a | | + | |
| - | | ::: | 左ビットシフト | %%<<%% | a %%<<%% 1 | | + | |
| - | | ::: | 右ビットシフト | %%>>%% | a %%>>%% 1 | | + | |
| + | <code python> | ||
| + | import csv | ||
| + | with open("test.csv") as f: | ||
| + | reader = csv.reader(f) | ||
| + | for l in reader: | ||
| + | print(l) | ||
| + | </code> | ||
| + | |||
| + | |||
| + | === 書き込み === | ||
| + | |||
| + | <code python> | ||
| + | import csv | ||
| + | |||
| + | datas = [ [1, 2, 3], [4, 5, 6] ] | ||
| + | |||
| + | # 全量書き込み | ||
| + | with open("test1.csv", "w") as f: | ||
| + | writer = csv.writer(f) | ||
| + | writer.writerows(datas) | ||
| + | |||
| + | # 1行書き込み | ||
| + | with open("test2.csv", "w") as f: | ||
| + | writer = csv.writer(f) | ||
| + | for data in datas: | ||
| + | writer.writerow(data) | ||
| + | </code> | ||