[Python] ファイルを作成する方法【テキスト/バイナリ】

Pythonでファイルを作成するには、組み込み関数open()を使用します。

テキストファイルを作成する場合、open()にファイル名とモード'w'(書き込みモード)を指定します。

バイナリファイルの場合は、モードに'wb'を指定します。

ファイルが存在しない場合は新規作成され、存在する場合は上書きされます。

ファイル操作が終わったらclose()でファイルを閉じるか、with文を使って自動的に閉じることが推奨されます。

この記事でわかること
  • テキストファイルの作成方法
  • バイナリファイルの書き込み手法
  • CSVやJSONファイルの扱い方
  • エラーハンドリングの重要性
  • ファイル操作の応用例と実践方法

目次から探す

テキストファイルの作成方法

テキストファイルを作成する方法には、さまざまなモードがあります。

ここでは、Pythonを使ってテキストファイルを作成し、データを書き込む方法について詳しく解説します。

書き込みモード’w’を使ったファイル作成

書き込みモード'w'を使用すると、新しいファイルを作成し、既存のファイルがあればその内容を上書きします。

以下は、書き込みモードを使ったファイル作成のサンプルコードです。

# ファイルを新規作成し、書き込みモードで開く
file = open('sample.txt', 'w')
file.write('こんにちは、Python!\n')
file.close()

このコードを実行すると、sample.txtというファイルが作成され、その中に「こんにちは、Python!」というテキストが書き込まれます。

sample.txtに「こんにちは、Python!」が書き込まれます。

追記モード’a’で既存ファイルに追加

追記モード'a'を使用すると、既存のファイルに新しいデータを追加することができます。

ファイルが存在しない場合は、新たに作成されます。

以下は、追記モードを使ったサンプルコードです。

# 追記モードでファイルを開く
file = open('sample.txt', 'a')
file.write('追記されたテキストです。\n')
file.close()

このコードを実行すると、sample.txtの末尾に「追記されたテキストです。」というテキストが追加されます。

sample.txtに「追記されたテキストです。」が追加されます。

読み書きモード’r+’でのファイル操作

読み書きモード'r+'を使用すると、ファイルを読み込みながら書き込むことができます。

このモードでは、ファイルが存在しない場合はエラーが発生します。

以下は、読み書きモードを使ったサンプルコードです。

# 読み書きモードでファイルを開く
file = open('sample.txt', 'r+')
content = file.read()
print('ファイルの内容:', content)
file.write('新しい行を追加します。\n')
file.close()

このコードを実行すると、ファイルの内容が表示され、その後に新しい行が追加されます。

ファイルの内容: こんにちは、Python!
追記されたテキストです。
新しい行を追加します。

ファイルに文字列を書き込むwrite()メソッド

write()メソッドを使用すると、指定した文字列をファイルに書き込むことができます。

以下は、write()メソッドを使ったサンプルコードです。

# 新しいファイルを作成し、文字列を書き込む
file = open('example.txt', 'w')
file.write('これは新しいファイルです。\n')
file.close()

このコードを実行すると、example.txtというファイルが作成され、その中に「これは新しいファイルです。」というテキストが書き込まれます。

example.txtに「これは新しいファイルです。」が書き込まれます。

複数行の書き込みwritelines()メソッド

writelines()メソッドを使用すると、リスト内の複数の文字列を一度にファイルに書き込むことができます。

以下は、writelines()メソッドを使ったサンプルコードです。

# 複数行のテキストをリストに格納
lines = ['行1: こんにちは!\n', '行2: Pythonを学ぼう!\n', '行3: さようなら!\n']
# ファイルを新規作成し、複数行を書き込む
file = open('lines.txt', 'w')
file.writelines(lines)
file.close()

このコードを実行すると、lines.txtというファイルが作成され、リスト内の各行がファイルに書き込まれます。

lines.txtに複数行が書き込まれます。

バイナリファイルの作成方法

バイナリファイルは、テキストファイルとは異なり、データをバイナリ形式で保存します。

ここでは、Pythonを使ってバイナリファイルを作成し、データを書き込む方法について詳しく解説します。

バイナリモード’wb’を使ったファイル作成

バイナリモード'wb'を使用すると、新しいバイナリファイルを作成し、既存のファイルがあればその内容を上書きします。

以下は、バイナリモードを使ったファイル作成のサンプルコードです。

# バイナリモードでファイルを新規作成
file = open('binary_file.bin', 'wb')
data = bytes([120, 3, 255, 0, 100])  # バイナリデータ
file.write(data)
file.close()

このコードを実行すると、binary_file.binというバイナリファイルが作成され、指定したバイナリデータが書き込まれます。

binary_file.binにバイナリデータが書き込まれます。

バイナリデータの書き込みwrite()メソッド

write()メソッドを使用すると、バイナリデータをファイルに書き込むことができます。

以下は、write()メソッドを使ったサンプルコードです。

# バイナリモードでファイルを開く
file = open('binary_data.bin', 'wb')
binary_data = bytearray([1, 2, 3, 4, 5])  # バイナリデータ
file.write(binary_data)
file.close()

このコードを実行すると、binary_data.binというファイルが作成され、バイナリデータが書き込まれます。

binary_data.binにバイナリデータが書き込まれます。

バイナリファイルの追記’ab’モード

追記モード'ab'を使用すると、既存のバイナリファイルに新しいバイナリデータを追加することができます。

ファイルが存在しない場合は、新たに作成されます。

以下は、追記モードを使ったサンプルコードです。

# 追記モードでバイナリファイルを開く
file = open('binary_file.bin', 'ab')
additional_data = bytes([6, 7, 8])  # 追加するバイナリデータ
file.write(additional_data)
file.close()

このコードを実行すると、binary_file.binの末尾に新しいバイナリデータが追加されます。

binary_file.binに新しいバイナリデータが追加されます。

バイナリファイルの読み書き’rb+’モード

読み書きモード'rb+'を使用すると、バイナリファイルを読み込みながら書き込むことができます。

このモードでは、ファイルが存在しない場合はエラーが発生します。

以下は、読み書きモードを使ったサンプルコードです。

# 読み書きモードでバイナリファイルを開く
file = open('binary_file.bin', 'rb+')
content = file.read()  # ファイルの内容を読み込む
print('ファイルの内容:', content)
# 新しいバイナリデータを追加
file.write(bytes([9, 10]))
file.close()

このコードを実行すると、ファイルの内容が表示され、その後に新しいバイナリデータが追加されます。

ファイルの内容: b'x\x03\xff\x00d\x06\x07\x08'

ファイルの存在確認とエラーハンドリング

ファイル操作を行う際には、ファイルの存在確認やエラーハンドリングが重要です。

ここでは、Pythonを使ってファイルの存在を確認し、エラーが発生した場合の対処方法について解説します。

ファイルの存在を確認するos.path.exists()

os.path.exists()を使用すると、指定したパスにファイルが存在するかどうかを確認できます。

以下は、ファイルの存在を確認するサンプルコードです。

import os
file_path = 'sample.txt'
# ファイルの存在を確認
if os.path.exists(file_path):
    print(f'{file_path} は存在します。')
else:
    print(f'{file_path} は存在しません。')

このコードを実行すると、指定したファイルが存在するかどうかが表示されます。

sample.txt は存在します。  # または、sample.txt は存在しません。

ファイルが存在しない場合の例外処理FileNotFoundError

ファイルが存在しない場合、FileNotFoundErrorが発生します。

このエラーを処理するためには、try-except構文を使用します。

以下は、例外処理のサンプルコードです。

file_path = 'non_existent_file.txt'
try:
    with open(file_path, 'r') as file:
        content = file.read()
except FileNotFoundError:
    print(f'エラー: {file_path} が見つかりません。')

このコードを実行すると、指定したファイルが存在しない場合にエラーメッセージが表示されます。

エラー: non_existent_file.txt が見つかりません。

ファイル操作時の一般的な例外処理try-except構文

ファイル操作を行う際には、さまざまなエラーが発生する可能性があります。

try-except構文を使用して、一般的な例外を処理することができます。

以下は、一般的な例外処理のサンプルコードです。

file_path = 'sample.txt'
try:
    with open(file_path, 'r') as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print(f'エラー: {file_path} が見つかりません。')
except IOError:
    print('エラー: 入出力エラーが発生しました。')

このコードを実行すると、ファイルが存在しない場合や入出力エラーが発生した場合に適切なエラーメッセージが表示されます。

エラー: sample.txt が見つかりません。  # または、エラー: 入出力エラーが発生しました。

ファイルの上書きを防ぐ方法

ファイルを新規作成する際に、既存のファイルを上書きしないようにする方法があります。

例えば、ファイルが存在する場合は新しいファイル名を生成することができます。

以下は、そのサンプルコードです。

import os
file_path = 'sample.txt'
if os.path.exists(file_path):
    base, extension = os.path.splitext(file_path)
    counter = 1
    new_file_path = f'{base}_{counter}{extension}'
    while os.path.exists(new_file_path):
        counter += 1
        new_file_path = f'{base}_{counter}{extension}'
    file_path = new_file_path
# 新しいファイルを作成
with open(file_path, 'w') as file:
    file.write('新しいファイルが作成されました。')
print(f'{file_path} が作成されました。')

このコードを実行すると、sample.txtが既に存在する場合は、sample_1.txtsample_2.txtのように新しいファイル名が生成されます。

sample.txt が作成されました。  # または、sample_1.txt が作成されました。

応用例:ファイル操作の実践

ここでは、Pythonを使ったさまざまなファイル操作の応用例を紹介します。

具体的には、CSVファイル、JSONファイル、画像ファイル、ログファイル、大量データの書き込みについて解説します。

CSVファイルの作成と書き込み

CSV(Comma-Separated Values)ファイルは、データをカンマで区切って保存する形式です。

Pythonのcsvモジュールを使用して、CSVファイルを作成し、データを書き込むことができます。

以下は、CSVファイルの作成と書き込みのサンプルコードです。

import csv
# 書き込むデータ
data = [
    ['名前', '年齢', '職業'],
    ['田中', 28, 'エンジニア'],
    ['佐藤', 34, 'デザイナー'],
    ['鈴木', 22, '学生']
]
# CSVファイルを新規作成し、データを書き込む
with open('data.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerows(data)
print('data.csv が作成されました。')
data.csv が作成されました。

JSONファイルの作成と書き込み

JSON(JavaScript Object Notation)ファイルは、データを構造化して保存するための形式です。

Pythonのjsonモジュールを使用して、JSONファイルを作成し、データを書き込むことができます。

以下は、JSONファイルの作成と書き込みのサンプルコードです。

import json
# 書き込むデータ
data = {
    '名前': '田中',
    '年齢': 28,
    '職業': 'エンジニア'
}
# JSONファイルを新規作成し、データを書き込む
with open('data.json', 'w', encoding='utf-8') as file:
    json.dump(data, file, ensure_ascii=False, indent=4)
print('data.json が作成されました。')
data.json が作成されました。

画像ファイルのバイナリ書き込み

画像ファイルをバイナリ形式で書き込むことも可能です。

以下は、画像ファイルをバイナリモードで書き込むサンプルコードです。

ここでは、既存の画像ファイルを読み込み、新しいファイルに書き込む例を示します。

# 画像ファイルをバイナリモードで開く
with open('input_image.png', 'rb') as input_file:
    image_data = input_file.read()
# 新しい画像ファイルをバイナリモードで作成
with open('output_image.png', 'wb') as output_file:
    output_file.write(image_data)
print('output_image.png が作成されました。')
output_image.png が作成されました。

ログファイルの作成と追記

ログファイルは、アプリケーションの動作やエラーを記録するために使用されます。

以下は、ログファイルを作成し、追記するサンプルコードです。

import datetime
# ログメッセージ
log_message = f"{datetime.datetime.now()}: アプリケーションが起動しました。\n"
# ログファイルに追記
with open('application.log', 'a', encoding='utf-8') as log_file:
    log_file.write(log_message)
print('ログが application.log に追記されました。')
ログが application.log に追記されました。

大量データの効率的なファイル書き込み

大量のデータをファイルに書き込む場合、効率的な方法を使用することが重要です。

以下は、リスト内の大量のデータをファイルに書き込むサンプルコードです。

# 大量のデータを生成
data = [f'行 {i}\n' for i in range(100000)]
# ファイルに一度に書き込む
with open('large_data.txt', 'w', encoding='utf-8') as file:
    file.writelines(data)
print('large_data.txt に大量のデータが書き込まれました。')
large_data.txt に大量のデータが書き込まれました。

これらの応用例を通じて、Pythonを使ったさまざまなファイル操作の方法を理解し、実践することができます。

よくある質問

ファイルが存在する場合に上書きされないようにするには?

ファイルが存在する場合に上書きされないようにするためには、ファイルの存在を確認し、既存のファイル名に基づいて新しいファイル名を生成する方法があります。

具体的には、os.path.exists()を使用してファイルの存在を確認し、存在する場合はファイル名に番号を付加して新しいファイル名を作成します。

以下はその例です。

import os
file_path = 'sample.txt'
if os.path.exists(file_path):
    base, extension = os.path.splitext(file_path)
    counter = 1
    new_file_path = f'{base}_{counter}{extension}'
    while os.path.exists(new_file_path):
        counter += 1
        new_file_path = f'{base}_{counter}{extension}'
    file_path = new_file_path
# 新しいファイルを作成
with open(file_path, 'w') as file:
    file.write('新しいファイルが作成されました。')

この方法により、既存のファイルを上書きすることなく、新しいファイルを作成できます。

テキストファイルとバイナリファイルの違いは何ですか?

テキストファイルとバイナリファイルの主な違いは、データの保存形式と内容の解釈方法です。

以下にその違いをまとめます。

スクロールできます
特徴テキストファイルバイナリファイル
データ形式人間が読める形式(文字列)コンピュータが解釈する形式(バイナリ)
エンコーディングUTF-8、ASCIIなどの文字エンコーディング特定のフォーマットに依存
使用例.txt、.csv、.jsonなど.png、.jpg、.exeなど
読み書きの方法open('file.txt', 'r')などopen('file.bin', 'rb')など

テキストファイルは主に文字データを扱い、バイナリファイルは画像や音声、実行ファイルなどの非テキストデータを扱います。

with文を使うメリットは何ですか?

with文を使用することにはいくつかのメリットがあります。

主な利点は以下の通りです。

  1. 自動的なリソース管理: with文を使用すると、ファイルを開いた後に自動的に閉じることができます。

これにより、ファイルを手動で閉じる必要がなく、リソースの管理が簡単になります。

  1. エラーハンドリング: with文内でエラーが発生した場合でも、ファイルは自動的に閉じられます。

これにより、リソースリークを防ぐことができます。

  1. コードの可読性向上: with文を使用することで、ファイル操作のコードが簡潔になり、可読性が向上します。

以下は、with文を使用したファイル操作の例です。

with open('sample.txt', 'r') as file:
    content = file.read()
    print(content)

このように、with文を使うことで、ファイル操作がより安全で効率的になります。

まとめ

この記事では、Pythonを使用したファイル操作の基本から応用までを詳しく解説しました。

テキストファイルやバイナリファイルの作成方法、データの書き込み、ファイルの存在確認やエラーハンドリングの手法について学びました。

これらの知識を活用して、実際のプログラムにおけるファイル操作を効率的に行うことができるようになりますので、ぜひ実際にコードを書いて試してみてください。

  • URLをコピーしました!
目次から探す