with文を使おう!
with open(ファイル名, 'w', encoding=文字エンコード) as 変数:
……(ファイルを操作する処理)
※コロン「:」の後に、文を続けて書くこともできるが、pep8では推奨されていない
※with文を使わずopen関数でファイルを開いて書き込んだり、読み込んだりすることもできるが、最後にclose関数でファイルを閉じる必要がある。with文は、インデントブロックが終了すると自動的にファイルを閉じてくれるので、ファイルの閉め忘れ防止という意味でもwith文を使おう!
- open関数の第1引数は、操作したいファイル名を書く
- open関数の第2引数は、'w'(write:書き込み)、'r'(read:読み込み)、'a'(append:追加書き込み)、'r+'(読み込んでから書き込み)、'w+'(書き込んでから読み込み)などがある。第2引数を省略した場合は、'r'(読み込み)になる。
- open関数の第3引数(キーワード引数)は、ファイルの読み書きの文字エンコーディングを現す。utf-8(UTF-8), shift-jis(シフトJIS), enc-jp(日本語EUC)などがある。
ファイルに書き込んでみよう!
test.txtというファイルを作成して書き込んでみる。
※指定したファイルが存在しない場合、ファイルを作成し、指定したファイルが存在する場合は、上書きが行われる。注意!!
with open('test.txt', 'w', encoding='utf-8') as file:
file.write('HELLO!\n')
file.write('ENJOY PYHON!\n')
HELLO!
ENJOY PYHON!
test.txtが作成され、文字列が出力されました。
作成したファイルを読み込んでみよう。
# 第2引数を省略。'r'が適応される
with open('test.txt', encoding='utf-8') as file:
# test.txt1の全文を読み込み
print(file.read())
>>>
HELLO!
ENJOY PYHON!
enumerate関数を使うと出力時に番号を付けることも可能!
# 第2引数を省略。'r'が適応される
with open('test.txt', encoding='utf-8') as file:
# test.txt1の全文を読み込み
for number, text in enumerate(file, 1):
print(number, text, end='')
>>>
1 HELLO!
2 ENJOY PYHON!
csvファイルを書き込もう!
import csv
with open(ファイル名, 'w', encoding=文字エンコード, newline='') as 変数:
csv.writer(ファイル).writerows(イテラブル)
※newlineは改行を抑制する効果がある。これを指定しないと改行が余分に出されて、文と文の間に空行が入ってしまうため、newline=''のようにする。
※writer(ライター) writerows(ライトローズ)
csv.writer(ファイル名).writerows(イテラブル)※1行だけ書き込む
変数 = csv.writer(ファイル名) # 変数に代入して使う
変数.writerrow(イテラブル)
import csv
memo = [('beef', 600), ('pork', 500), ('chiken', 400)]
with open('memo.csv', 'w', encoding='utf-8', newline='') as file:
csv.write(file).write
csv.writer(file).writerows(memo)
beef,600
pork,500
chiken,400
csvファイルを読み込もう!
with open(ファイル名, encoding=文字エンコード) as 変数:
for 変数 in csv.reader(ファイル名):
……
※reader()は、イテラブルとして働き、値をリストで返す。
import csv
with open('memo.csv', encoding='utf-8') as file:
for row in csv.reader(file):
print(row)
file.seek(0)
print([tuple(i) for i in csv.reader(file)])
>>>
['beef', '600']
['pork', '500']
['chiken', '400']
[('beef', '600'), ('pork', '500'), ('chiken', '400')]