shinoblog-manabu

Progate(プロゲート)を使って初歩の初歩からプログラミング勉強をはじめました。無料から有料バージョンへ以降しつつ、自分辞書として活用しています。なるべく私と同じ初心者目線を使い、各プログラミング内容を説明したいです。

ファイル

ファイル

f:id:shinoblog-manabu:20210621164738j:plain



Pythonでできること

・ファイルを読み込む

= ファイルのデータを操作する

 

 

・何かのデータをファイルに書き出す

= ファイルのデータの一部を変更・付け足す

 

 

ファイルに書き出す

 

「組み込み関数open」をつかう

open関数の特徴

・2つの引数を受け取る

1つめの引数

ー開こうとしているファイルのぱすを表す文字列。

2つめの引数

ーファイルをどんなモードで開きたいのかを表す文字列。

 

・ファイルへのパス、またはファイルパス

ーコンピューターのどこにファイルがあるか?を表す文字列。

/Users/ sake/ st.txt

= st.txtというファイルへのパスを表す。

=スラッシュ記号で各単語が別れており、それぞれがフォルダ名を表す。

 

 

※ファイルパスにファイル名しかない・スラッシュで区切られたフォルダ名を含んでいない場合

Pythonはプログラムを実行したときのフォルダの中から指定されたファイルを探す。

 

※ファイルパスは手書きで書くべきではない

正しく動作しない場合があるため。

トラブルを避けるためにどうするべきか?

 

os.path.join関数をつかう

Ex.1-1:os.path.join関数をつかう

f:id:shinoblog-manabu:20210625095559p:plain

 

パスを組み立てることができた!

f:id:shinoblog-manabu:20210625095634p:plain

 

-point-

・ファイルパスを組み立てるとき、Pythonモジュールのosモジュールを使う。

・複数のフォルダ名を引数として受け取りつつフォルダ名からパスを組み立てる。

 

参考

※英語サイト※

www.theselftaughtprogrammer.io

 

 

 

モード

 

モードとは

open関数がファイルを開く時、どのように動作するべきかを決定するための引数

 

 

モードの種類

・“r”

読み込み専用としてファイルを開く

 

・“w”

書き出し専用としてファイルを開く。

Ex

もし、既にあるファイルを指定した場合、新しいファイルが作られる

 

・“w+”

読み書き両方できるようにファイルを開く。

Ex.

ファイルがすでにある場合、上書きされる。ファイルが無ければ新しいファイルを作り、読み書きする。

 

 

ファイルオブジェクト

 

open関数の特徴として、ファイルオブジェクトと言われるオブジェクトを返す。

ファイルオブジェクトを介してファイルを読み書きする事ができる。

 

Ex:”w”の場合

プログラムを実行したディレクトリに、open関数によって新しいファイルが作られる。

以下はその手順

 

1.writeメソッドを使う

・ファイルオブジェクトのwriteメソッドを使って、ファイルに書き込む。

 

2.closeメソッドを使う

・ファイルに書き終え、次にcloseメソッドを使ってファイルを閉じる

 

-point-

ファイルを閉じること

もし複数のファイルを開いた後、閉じるのを忘れてしまった場合、

プログラムが正常に作動しない場合があるため

 

 

Ex1-2:ファイルを開き、ファイルに書き込みつつ、ファイルを閉じる例。

f:id:shinoblog-manabu:20210625095421p:plain

???コンソールには何も表示されなかった...

f:id:shinoblog-manabu:20210625095440p:plain

 

-point-

open関数を使ってファイルを開き、open関数の戻り値を変数stに代入している。

・stオブジェクトのwriteメソッドを使って文字列をファイルに書き込んでいる。

writeメソッドは引数に文字列を受け取り、Pythonが作成した新しいファイルに書き込む。

・ファイルオブジェクトのcloseメソッドを読んでファイルを閉じる。

 

2021/06/27 続き

 

日本語文字列を書き込む

 

日本語列を書き込む場合

ファイルを開く時にもう一つ引数を指定する。

Ex:日本語でも動作する

 

f:id:shinoblog-manabu:20210627091759p:plain

 

f:id:shinoblog-manabu:20210627091807p:plain

encoding引数

 

encoding引数には、ファイルの文字コードを指定する。

上記の場合、「utf-8」を指定している。

 

encoding引数は、変換方式を指定する。

utf-8」は変換方式の一つ。広く使われている。

 

書き込める場合・書き込めない場合

 

書き込める

文字列が英数字などのアスキー文字だけの場合、ファイルにそのまま書き込める。

 

書き込めない

日本語などの「非アスキー文字」

※ファイルに保存できる形式に変換する必要がある。

 

 

ファイルを自動的に閉じる

 

ファイルの閉じ忘れを防止する

ファイルをオープンにするときの、閉じ忘れの対処方法。

 

Ex.

with open(ファイルパス, モード)as変換名:

コード

このように書く。

 

-point-

・ファイルオブジェクトを使う全てのコードをwith文の中に書く

with文は複合文の1つ。

・処理がwithブロックを抜けたとき、自動的に指定した処理を実行する。

・ファイルのオープンに上記の構文を使う場合、コードが最後まで実行される。

その後、ファイルは自動的に閉じられる。

 

 

例1-4:ファイルを書いてファイルを閉じる。(※前節の構文を新しく書き直した)

 

f:id:shinoblog-manabu:20210627091830p:plain

f:id:shinoblog-manabu:20210627091837p:plain

 

-point-

with文のブロック中はm変数fを使ってファイルオブジェクトを操作可能。

with文のブロックにあるコードをすべて実行しおわったら、Pythonは開いたファイルを閉じてくれる。

 

 

 

ファイルから読み込む

 

ファイルを読み込む方法

open関数の第2引数に"r”を渡す。

・ファイルオブジェクトのreadメソッドを呼び出す

readメソッドは戻り値とする。

・ファイルのすべての文字を含む、イテラブルなオブジェクトを返す。

 

例1-5

f:id:shinoblog-manabu:20210627091913p:plain

!?前節で書いたコードが出力された!!

 

f:id:shinoblog-manabu:20210627091926p:plain

 

>>say hello to python!

 

 

ファイル内に日本語などの「非アスキー文字」を含む可能性を考える

 

常にencoding引数を指定したほうが良い。

f:id:shinoblog-manabu:20210627091946p:plain

f:id:shinoblog-manabu:20210627091954p:plain

 

-point-

ファイルがアスキー文字のみで書かれている場合

・上記の書き方で問題なし。

Windowsにて良く使われている「シフトJIS」にて。このファイルが書かれている場合、encodingに”cp932”を指定する。

readメソッドはファイルを開いた後1回だけ使える。

・もう一度コンテンツを読み込みたい場合、ファイルを一旦とじてからもう一度開く。

 

 

Ex.:ファイルのコンテンツを読み込み、リストに入れておく

f:id:shinoblog-manabu:20210627092030p:plain

 

f:id:shinoblog-manabu:20210627092037p:plain

このようにすることで、あとでこのデータを使うことができる。

 

2021/06/28

 

csvファイル

csvファイルは組み込みモジュールとして標準ライブラリに入っている。

csvの拡張子は.csv

中身のデータはカンマで区切られている。

EXCELなどのスプレッドシートを使うプログラムにCSVファイルが良く使われる。


スプレッドシート上でのCSVファイル

CSVファイルのかんまで区切られたそれぞれのデータ⇛スプレッドシート上ではセルと言われる単位を使う。

CSVの1行はスプレッドシートの1行。

各データを区切るデリミタ(区切り文字)はカンマ以外の記号「|(バー)」などが使える。


self_tauht.csvというファイルに保存する

下記を保存しておく


one,two,three

four, five,six


上記ファイルをエクセルで開くと、one,two,threeという内容の各セルがスプレッドシートの1行目にある。

2行目にfour,five,sixという内容が各セルに書かれている。

CSVファイルを開く時にもwith文が使える。

csvモジュールを使ってファイルオブジェクトからcsvオブジェクトに変換するコードはwith文の内側で実行すること。

csvモジュールのwriterメソッドは、ファイルオブジェクトとデリミタを受け取り、csvオブジェクトを返す。

csvオブジェクトにはwriterowメソッドがある。

writerowメソットは引数としてリストを受け取り、リスト内容をcsvファイルに書き出す。

リストすべての要素がwriterメソッドに指定したデリミタで区切りられており、CSVファイルの1行に出力される。

writerowメソッドは1回の呼び出しで1行書き出す。

2行書き出すには2回呼び出す必要がある。


f:id:shinoblog-manabu:20210628112333p:plain

 

上記は新しいファイル「st.csv」を作る。

テキストエディタでファイルを開く。すると下記のようになっている


one,two,three

four,five,six


このファイルをエクセル(にたような相互アプリも可)で開く。するとカンマが表示されない代わりにonetwothreeという文字が1行の3つのセルに表示される。



CSVファイルの読み込み

csvモジュールを使い、CSVファイルの読み込みをすることが出来る。


CSVファイルを読み込むために

open関数の第2引数(モード)に”r”を指定する。

with文の内側でcsv.rederメソッドにファイルオブジェクトを指定。

デリミタとしてカンマを指定。この2つを指定して呼び出す。


関数からの返値として、CSVを1行で扱えるイテラブルが返される。

 

f:id:shinoblog-manabu:20210628112357p:plain

 

p131まで、まとめ。

 

 

 

総評

プログラムコードよりも言語が多め。非常に難解。

言葉尻を追っかけるので精一杯。

実行できなかったコード有り。検証するサイトなし。

言っている意味はなんとなく解るが決定打に欠ける。

文章構成の意味を理解するのに時間がかかり、問題のコードを書く時間が極端に減ったのは問題。別のサイトで勉強すべき内容だった。

 

上記から察するに私はこの本とは相性が伴っていないのだろう。終始モヤモヤが消えなかった。とはいえ、半分近くまで進めてきたから、このまま最後まで勉強してみようと思う。