MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Pythonの基礎 - ファイルのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Pythonの基礎 - ファイル
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Pythonでは、ローカルに保存されたファイルからデータを読み込んだり、ファイルへデータを書き込むことができる。<br> また、ディレクトリに含まれるファイルの一覧を取得したり、ディレクトリ名を変更したりすることもできる。<br> <br><br> == ファイルのオープン / クローズ == ==== ファイルを開く ==== 組み込み関数の<code>open</code>関数を使用してファイルを開くことができる。<br> <syntaxhighlight lang="python"> open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) </syntaxhighlight> <br> 第1引数は、開くファイル名を指定する。<br> 正常に開くことができる場合、対応するファイルオブジェクトを返す。(ファイルオブジェクトは、第2引数で指定したモードにより異なる)<br> 正常に開くことができない場合、例外<code>OSError</code>が送出される。<br> <br> 第2引数は、ファイルを開くモードを指定する。(デフォルトはテキストモード(<code>t</code>)のため、<code>t</code>を明示的に付加する必要はない)<br> バイナリモード(<code>b</code>)で読み込み権限や書き込み権限を付加する場合、<code>r+b</code>や<code>wb</code>と指定する。<br> * r *: 読み込み用(ファイルが存在しない場合はエラー) * r+ *: 読み込みおよび書き込み用(ファイルが存在しない場合はエラー) * w *: 書き込み用(ファイルの中身をクリア) * w+ *: 読み込みおよび書き込み用(ファイルの中身をクリア) * a *: 書き込み用(ファイルの末尾に追加) * a+ *: 読み込みおよび書き込み用(ファイルの末尾に追加) * x *: 書き込み用(ファイルが存在している場合はエラー) * x+ *: 読み込みおよび書き込み用(ファイルが存在している場合はエラー) * b *: バイナリモード * t *: テキストモード <br> 第4引数は、使用する文字エンコーディングを指定する。<br> これは、テキストモードでのみ指定する。<br> * ascii * cp932 * euc_jp * shift_jis * utf-8 (utf_8) <br> エンコーディングを省略した場合は、現在のプラットフォームのデフォルトエンコーディングが使用される。<br> 自身の環境でのデフォルトエンコーディングを確認するには、以下のソースコードを実行する。<br> <syntaxhighlight lang="python"> import locale locale.getpreferredencoding() </syntaxhighlight> <br> もし、UTF-8を使用して記述されたファイルを読み込む場合、<code>encoding='UTF-8'</code>のように引数に指定する。<br> なお、開くファイルが存在しない場合は、例外<code>FileNotFoundError</code>が発生する。<br> <syntaxhighlight lang="python"> f1 = open('myfile.txt', 'r') f2 = open('myfile.txt', 'w+') f3 = open('myfile.txt', 'r', encoding='UTF-8') f4 = open('myfile.txt', 'rb') </syntaxhighlight> <br> 正常にファイルが開かれると、ファイルオブジェクトが返る。<br> ファイルオブジェクトのクラスは、<code>open</code>関数で使用したモードによって異なる。<br> 例えば、テキストモードの場合は<code>io.TextIOWrapper</code>、バイナリモードの読み込みの場合は<code>io.BufferedReader</code>、バイナリモードの書き込みの場合は<code>io.BufferedWriter</code>、<br> バイナリモードの読み書きの場合は<code>io.BufferedRandom</code>となる。<br> * r *: io.TextIOWrapper *r+ *: io.TextIOWrapper * rb *: io.BufferedReader *r+b *: io.BufferedRandom * w *: io.TextIOWrapper *w+ *: io.TextIOWrapper *wb *: io.BufferedWriter * w+b *: io.BufferedRandom * a *: io.TextIOWrapper * a+ *: io.TextIOWrapper * ab *: io.BufferedWriter * a+b *: io.BufferedRandom * x *: io.TextIOWrapper * x+ *: io.TextIOWrapper * xb *: io.BufferedWriter * x+b *: io.BufferedRandom <br> ==== ファイルを閉じる ==== ファイルの使用後は、<code>close</code>関数を使用してファイルオブジェクトを閉じる。<br> <syntaxhighlight lang="python"> f = open('myfile.txt', 'r') # 処理1 # 処理2 f.close() </syntaxhighlight> <br> 他の方法として、<code>with</code>文を使用してファイルを開く場合、使用後は自動的にファイルを閉じることができる。<br> どちらの方法でも、結果は同じになる。<br> <syntaxhighlight lang="python"> with open('myfile.txt', 'r') as f: # 処理1 # 処理2 </syntaxhighlight> <br> 以下の例では、myfile.txtファイルの内容を読み込み画面に出力した後、ファイルオブジェクトを閉じている。<br> 以下の内容のmyfile.txtファイルを作成する。<br> # myfile.txtファイル Hello World <br> <syntaxhighlight lang="python"> f = open('myfile.txt', 'r') data = f.read() print(data) f.close() </syntaxhighlight> <br><br> == デキストファイルファイルの読み込み == ==== 全体を読み込む (readメソッド) ==== ファイルに含まれるテキストを全て読み込む場合、<code>read</code>メソッドを使用する。<br> <syntaxhighlight lang="python"> read(size=-1) </syntaxhighlight> <br> 引数を指定しない場合、ファイルを<code>EOF</code>(ファイルの終端)まで読み込み、文字列として返す。<br> 引数に最大文字数を指定する場合、指定した文字数分だけ読み込む。<br> <br> なお、読み込むファイルの文字エンコードと<code>open</code>関数で指定した文字エンコードが異なる場合、<code>read</code>メソッドを実行した時、例外<code>UnicodeDecodeError</code>が発生する。<br> <br> 以下の例では、プログラムと同階層のディレクトリにmyfile.txtファイル(UTF-8)を作成している。<br> <syntaxhighlight lang="python"> f = open('myfile.txt', 'r', encoding='UTF-8') data = f.read() print(data) f.close() </syntaxhighlight> <br> ==== 行単位で読み込む (readlineメソッド) ==== ファイルから1行ずつファイルの内容を読み込む場合、<code>readline</code>メソッドを使用する。<br> <br> <code>readline</code>メソッドは、改行または<code>EOF</code>までファイルを読み込み、文字列として返す。<br> 引数に最大文字数を指定する場合、指定した文字数分だけ読み込む。<br> ファイルの終端である<code>EOF</code>まで読み込むと空の文字列を返す。<br> <syntaxhighlight lang="python"> readline(size=-1) </syntaxhighlight> <br> 以下の例では、<code>for</code>文および<code>while</code>文を使用して、ファイルの終端まで順にファイルの内容を読み込んでいる。<br> <br> なお、<code>readlines</code>メソッドの場合と同様、各行のデータには改行文字が含まれるため、<br> 必要な場合は、<code>print</code>関数で最後に改行を行わないようにする、または、読み込んだデータの末尾から改行を取り除くこと。<br> <syntaxhighlight lang="python"> # for文を使用する場合 f = open('myfile.txt', 'r', encoding='UTF-8') for data in f: print(data) # 改行をそのまま出力する場合 print(data.rstrip('\n')) # 改行を取り除く場合 f.close() # while文を使用する場合 f = open('myfile.txt', 'r', encoding='UTF-8') while True: data = f.readline() if data == '': break print(data) # 改行をそのまま出力する場合 print(data.rstrip('\n')) # 改行を取り除く場合 f.close() </syntaxhighlight> <br> ==== 行単位で分割してリストとして取得する (readlinesメソッド) ==== <code>readlines</code>メソッドを使用して、ファイル全体の読み込み後、読み込みしたデータを行単位で分割して、リストの要素として追加することができる。<br> <br> <code>readlines</code>メソッドは、引数に最大文字数を指定する場合、指定した文字数分だけ読み込む。<br> <syntaxhighlight lang="python"> readlines(hint=-1) </syntaxhighlight> <br> 以下の例では、ファイルの内容を全て読み込み、行単位で分割してリストとして取得したデータを順に出力している。<br> <br> <code>print</code>関数を使用して出力する場合、各行のデータには改行文字が含まれており、<code>print</code>関数では最後に自動的に改行をするようになっているため、改行が2回出力される。<br> そのため、<code>print</code>関数を使用して出力する場合、改行なしで出力する、または、出力するデータの末尾から改行を取り除くこと。<br> <syntaxhighlight lang="python"> f = open('myfile.txt', 'r') datalist = f.readlines() for data in datalist: print(data, end='') # 改行なしで出力する print(data.rstrip('\n')) # 文字列の末尾から改行を取り除く f.close() </syntaxhighlight> <br><br> == テキストファイルの書き込み == テキストファイルへ書き込むためにファイルを開く場合、 <code>open</code>関数のモードとして<code>w</code>、<code>a</code>、<code>x</code>のいずれかを指定する。<br> <syntaxhighlight lang="python"> f = open('myfile.txt', 'w') f = open('myfile.txt', 'a') f = open('myfile.txt', 'x') </syntaxhighlight> <br> <code>w</code>を指定する場合、対象のファイルが存在していない時はファイルを新規作成して書き込む。<br> ファイルが存在する時はファイルに上書きする。(既存のファイル内容は全て削除)<br> <br> <code>a</code>を指定する場合、対象のファイルが存在していない時はファイルを新規作成して書き込む。<br> ファイルが存在する時は既存のファイル内容に追記して書き込む。<br> <br> <code>x</code>を指定する場合、対象のファイルが存在しない時はファイルを新規作成して書き込む。<br> ファイルが存在する時は、例外<code>FileExistsError</code>が発生する。<br> <br> 書き込むファイルの文字エンコードが、ユーザの環境のデフォルトエンコーディングと異なる場合は、文字エンコードを指定する。<br> <syntaxhighlight lang="python"> f = open('myfile.txt', 'w', encoding='UTF-8') </syntaxhighlight> <br> ==== 書き込み / 上書き (wモード) ==== <code>w</code>モードでファイルを書き込む場合、ファイルが存在しない時はファイルを新規作成、ファイルが存在する時は上書きする。(既存のファイル内容は全て削除)<br> <br> テキストファイルに書き込む場合は、<code>write</code>メソッドを使用する。<br> <code>write</code>メソッドの引数に、ファイルに書き込む文字列を指定する。<br> <br> <code>write</code>メソッドは最後に改行を書き込まないため、必要に応じて<code>\n</code>を合わせて書き込む。<br> 標準では、<code>\n</code>を書き込むと自動的に利用しているプラットフォームに合わせて改行が書き込まれる。<br> 例えば、MacOSの場合は<code>\r</code>、Windowsの場合は<code>\r\n</code>が書き込まれる。<br> <syntaxhighlight lang="python"> f = open('myfile.txt', 'w') f.write('こんにちは\n') f.close() </syntaxhighlight> <br> 複数の文字列をまとめてファイルに書き込む場合は、<code>writelines</code>メソッドを使用する。<br> 引数には、文字列を要素としてリストを指定して、リストの要素を順にファイルに書き込む。<br> <syntaxhighlight lang="python"> f = open('myfile.txt', 'w', encoding='UTF-8') datalist = ['こんにちは\n', 'お元気ですか?\n', 'それではまた\n'] f.writelines(datalist) f.close() </syntaxhighlight> <br> <code>writelines</code>メソッドは自動的に改行を書き込まないため、必要に応じて、要素に格納する文字列に<code>\n</code>を記述する。<br> <code>w</code>モードの場合はファイルが存在しても上書きで書き込むため、<code>open</code>関数で指定した文字エンコードを使用してファイルに書き込む。(既存のファイルの文字エンコードは無視される)<br> そのため、文字エンコードが異なる場合でもエラーにはならない。<br> <br> ==== 追記 (aモード) ==== <code>a</code>モードでファイルを追記する場合、ファイルが存在しない時はファイルを新規作成、ファイルが存在する時はファイルの最後に追記する。(既存の内容はそのまま)<br> <br> ファイルに追記する場合は、<code>w</code>モードと同様、<code>write</code>メソッド、または、<code>writelines</code>メソッドを使用する。<br> <syntaxhighlight lang="python"> f = open('myfile.txt', 'a') f.write('こんにちは\n') datalist = ['お元気ですか?\n', 'それではまた\n'] f.writelines(datalist) f.close() </syntaxhighlight> <br> <u>※注意</u><br> <u>既存のファイルに追記する時、ファイルの文字エンコードとopen関数の文字エンコードが異なる場合、</u><br> <u><code>write</code>メソッドを実行する時はエラーは発生しないが文字化けするため注意すること。</u><br> <br> <syntaxhighlight lang="python"> f = open('myfile.txt', 'a', encoding='UTF-8') f.write('それではまた\n') f.close() </syntaxhighlight> <br> ==== ファイルを新規作成して書き込む (xモード) ==== <code>x</code>モードでファイルに書き込む場合、ファイルが存在しない場合はファイルを新規作成して書き込む。<br> ファイルが存在する場合は、<code>open</code>関数を実行した時点で例外<code>FileExistsError</code>が発生する。<br> <br> ファイルに書き込む場合、<code>w</code>モードと同様、<code>write</code>メソッド、または<code>writelines</code>メソッドを使用する。<br> <syntaxhighlight lang="python"> f = open('myfile.txt', 'x', encoding='UTF-8') f.write('こんにちは\n') datalist = ['お元気ですか?\n', 'それではまた\n'] f.writelines(datalist) f.close() </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:Python]]
Pythonの基礎 - ファイル
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse