この章では、「テキストファイル」と「csvファイル」への書き込みについて解説したいと思います。Pythonで行った処理を保存する方法になりますので、しっかりと使えるようになりましょう!
1.テキストファイルへの書き出し(上書き)
まずは、「テキストファイル」への書き出し(上書き)について解説します。ここでは、「直接入力」と「listを入力」の2つの方法を解説します。
1.出力を直接入力
まずは、下のコードをテキストファイルを作りたい場所(作業場所)に保存し、実行してください。
f = open('out.txt', 'w') f.write('あいうえお') f.write('12345') f.close()
すると、コードと同じ場所に「out.txt」というテキストファイルができましたね!では、1行ずつ解説していきます。
まず、1行目の
f = open('out.txt', 'w')
ですが、基本的に「テキストファイルの読み込み」の時と同様に、「open」を使って「out.txt」というファイルを開く、という意味になります。
ただし、読み込みの時に「r」になっていた部分が、今回は「w」になっていますね。これが、出力ファイルの目印になります。
そして「open」で「w」を使うと「ファイルが無いなら作り、ファイルがあれば上書き」という意味になります。(※重要です)
では次に2,3行目についてですが、テキストファイルへの書き込みには「ファイル.write(‘書き込みたい内容’)」という形をとります。今回だと以下の形ですね。
f.write('あいうえお')
※ちなみに、「‘書き込みたい内容’」は「変数」を使うこともできます。下の形です。
data = 'あいうえお' f.write(data)
ここで「out.txt」を確認すると、下のように「あいうえお12345」と出力されており、改行が入っていないことが分かります。
もし入力ごとに改行したかったら、改行コードである「\n」を改行する場所につけることで改行できます。今回だと以下のようになります。
f.write('あいうえお/n') f.write('12345')
※バックスラッシュは、フォントによって「¥」に変化しますが、特に問題ありません。
「あいうえお」の後ろに改行コードを入れることで、上のように改行することができました!
最後の行は、「テキストファイルの読み込み」の時と同様に、「openで開いたファイルはcloseで閉じる」を行っているだけです。
この操作は、「open」でファイルを開いたら必ず行ってください!
2.出力をlistで渡す方法
次に、出力する値を「list」で渡す方法について解説したいと思います。
「list」を渡す場合、「writelines」というものを使います。基本的な使い方は「write」の時と同じで、出力に渡すものが「list」になります。
では、実際にコードを実行してみましょう。
f = open('out2.txt', 'w') data = ['あいうえお','12345'] f.writelines(data) f.close()
実行すると、「write」を使用した時と同じように、「out2.txt」に「あいうえお12345」と出力されましたね。
ただし、「list」を出力する場合にも、改行されていないという問題が生じています。
そこで、今回も改行コード「\n」を使用することで改行させることができます。今回だと、「list」である「data」を下のように変えれば良いです。
data = ['あいうえお\n','12345']
改行コードを入れて実行することで、下のようにちゃんと改行することができます!
- 「ファイル.write(‘書き込みたい内容’)」という形を使う。
- 改行したい場合は改行コードである「\n」を改行する場所につける。
- 「list」を渡す場合「writelines」を使う。
2.テキストファイルへの書き出し(追記)
先ほどの出力方法は、「ファイルの新規作成 or 上書き」の処理でしたが、次は「ファイルの新規作成 or 追記」の方法について解説したいと思います。
結論から言うと、openでファイルを開くときに「a」を使うと上書きすることができます。では、実際にコードを動かしてみましょう。
f = open('out3.txt', 'a') data = ['あいうえお\n','12345\n'] f.writelines(data) f.close()
これは「2.出力をlistで渡す方法」のコードをベースに、「open」で開く際に「w」ではなく「a」を使ったものです。
では、このコードを2回実行してください。すると、1回目は「out3.txt」が作成され、2回目はそのファイルに「追記」されたと思います。
ちなみに、3回、4回と繰り返し実行するたびに下に追記されていきます。
つまり、「open」を使用する際、ファイルを上書きしたい場合は「w」、ファイルを追記したい場合は「a」を使用するということです。
ファイルを上書きしたい場合はopen時に「w」を使用
ファイルを追記したい場合はopen時に「a」を使用
3.csvファイルへの書き出し(list)
最後に「list」のcsvへの書き出しについて解説したいと思います。
※csvの出力を直接入力する場合は、テキストファイルの「1.出力を直接入力」と同じコードで、ファイルの拡張子を「csv」にすれば良いです。
csvの出力では、読み込みの時と同様に「csv」というライブラリを使用します。そして出力の場合、「csv」ライブラリの中でも「csv.writer」というものを使用します。
1.1次元のlistを出力
csvへの出力では、「list」の次元によって使用するものが変わります。
- 1次元 = 「writerow」
- 2次元 = 「writerows」
まずは1次元の「writerow」について解説していきます!
下のコードを実行してください。
import csv f = open('out.csv', 'w') data = ['あいうえお','12345'] writer = csv.writer(f) writer.writerow(data) f.close()
すると、「out.csv」というcsvファイルができ、エクセルで開くと下のようになります。
では、1行ずつ解説していきますね。
まず1行目と2行目では、それぞれ「ライブラリのインポート」と「書き出しファイルの読み込み」を行っています。この辺りは大丈夫ですね!
次に3行目では、1次元の「list」データを作成しています。(次元については後述)
重要なのは4、5行目ですが、csvファイルへの書き込みを行う際は「writer = csv.writer(ファイル)」と「writer.writerow(出力するlist)」という形をとります!
今回の場合、ファイルは「f」、出力するlistは「data」ですね。
writer = csv.writer(f) writer.writerow(data)
※ここは形を覚えてください!
(この辺りを詳しく解説するにはクラスやオブジェクトについての解説が必要なのですが、ややこしくなるためここでの説明は割愛します。気になった方は「Python クラス オブジェクト」などで検索してみてください。)
これで、csvへの1次元の「list」の出力ができました!
2.2次元のlistを出力
次に、2次元のlistの出力についてです。
まず、listの次元について軽く説明します。実は「list」は、listの中にさらにlistを作ることができます。
具体的には以下のようになります。
data1 = [1,2] data2 = [[1,2],[3,4],[5,6]]
ここで、data1は1次元、data2が2次元となります。
次元という話がでると難しく感じるかもしれませんが、行か列のみが1次元、行と列があるのが2次元と考えてください!(下の図)
さて、では2次元のlistの出力を説明したいと思います。基本的に1次元と同様で、渡すlistが2次元になり、「writerows」を使うだけです!
import csv f = open('out2.csv', 'w') data = [['あいうえお','12345'],['かきくけこ','678910']] writer = csv.writer(f) writer.writerows(data) f.close()
すると、下のようにcsvファイルに出力できます!
ただ、なぜか空白の行ができてしまっていますね。これを削除するためには「open」を使う際に「newline=”」を追加します!
import csv f = open('out2.csv', 'w', newline='') data = [['あいうえお','12345'],['かきくけこ','678910']] writer = csv.writer(f) writer.writerows(data) f.close()
これで完成です。csvでの出力を行う際は、openで「newline=”」を使う!と覚えておいてください。
なお、numpyやpandasのcsvへの書き出しについては「Pythonでのcsvファイルへの書き出し方法について」にて解説していますので、そちらをご覧ください。
- 「csv」ライブラリの「csv.writer」というものを使用する。
- 1次元 への出力は「writerow」
- 2次元 への出力は「writerows」
- 「writer = csv.writer(ファイル)」と「writer.writerow(出力するlist)」という形で使う。
- 行間の空白を防ぐには、「open」使用時に「newline=”」を使う。
4.まとめ
さて、今回はPythonを用いたファイルへの出力について解説しました。この他、numpyやpandasの出力については、本サイトの「Pythonでのcsvファイルへの書き出し方法について」で解説していますので、そちらをご覧ください。
長くなってしまいましたが、これらが使えると結果を保存してほかの人に渡したりも出来ますので、しっかり使えるようになりましょう!
また、このサイトでは初心者の方向けに「プログラミングのお勧め学習法」も紹介していますので、気になった方はそちらもご覧いただけると幸いです。
コメント