Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python入門:複数のファイルデータを1つのマスターファイルに書き込む方法

ファイル操作は、あらゆるWebアプリケーションにおいて欠かせない重要な処理です。Pythonには、ファイルの作成・読み取り・更新・削除を行うための関数が数多く用意されています。

既存のファイルに書き込みを行う場合は、open() 関数にモードを指定するパラメータを追加する必要があります。

  • "a"(Append/追記モード) — ファイルの末尾にデータを追加します
  • "w"(Write/上書きモード) — 既存の内容をすべて消去して上書きします

実装例:複数のファイルを1つのマスターファイルに統合する

以下の例では、指定したディレクトリ内にある複数のテキストファイルを読み込み、その内容を1つのマスターファイル(master.txt)に順番に書き込んでいます。

import os

# ディレクトリ内のファイル一覧を取得
file_dir = 'D:\\python\\data_files\\data_files'
out_file = r'D:\python\data_files\target_file\master.txt'
lis = os.listdir(file_dir)
print(lis)

# 既存のマスターファイルがあれば削除(追記による重複を防止)
if os.path.exists(out_file):
    os.remove(out_file)

# ヘッダー行を出力ファイルに書き込む
head = open(out_file, 'a+')
line = 'empno, ename, sal'
head.write(line + '\n')
head.close()

# 各ファイルのデータを出力ファイルへ追記していくループ
for line1 in lis:
    f_dir = file_dir + '\\' + line1
    in_file = open(f_dir, 'r')   # 入力ファイルを読み取りモードで開く
    w = open(out_file, 'a+')     # 出力ファイルを追記モードで開く
    d = in_file.readlines()
    w.write('\n')
    for line2 in d:
        print(line2)
        w.write(line2)
    in_file.close()
    w.close()

コードのポイント

  1. os.listdir() を使って、対象ディレクトリ内のファイル一覧を取得します。
  2. 既存のマスターファイルが存在する場合は削除し、前回実行時のデータが混ざらないようにしています。
  3. ヘッダー行「empno, ename, sal」を最初に書き込みます。
  4. 各ファイルを読み取りモード('r')で開き、内容を1行ずつ読み込んで、追記モード('a+')の出力ファイルへ書き込みます。

pandasを使ったより簡潔な方法

大量のデータファイルを扱う場合や、より短いコードで実現したい場合は、データ分析ライブラリの pandas を活用すると便利です。read_csv() で各ファイルをDataFrameとして読み込み、concat() で結合し、to_csv() で一括出力できます。

import pandas as pd

# pd.read_csv で各ファイルをDataFrameとして読み込む
df1 = pd.read_csv('D:\\python\\data_files\\data_files\\emp_1.txt')
df2 = pd.read_csv('D:\\python\\data_files\\data_files\\emp_2.txt')
df3 = pd.read_csv('D:\\python\\data_files\\data_files\\emp_3.txt')

frames = [df1, df2, df3]

# concat 関数で複数のDataFrameを連結する
result = pd.concat(frames)

# to_csv 関数で結果をファイルに出力する
result.to_csv(r'D:\python\data_files\target_file\master.txt',
              encoding='utf-8', index=False)

pandas版のメリット

  • コード量が大幅に減り、可読性が向上します。
  • index=False を指定することで、不要なインデックス列の出力を防げます。
  • encoding='utf-8' を指定すれば、日本語を含むデータも文字化けせずに保存できます。

このように、Pythonでは標準ライブラリだけでもファイルの統合処理は可能ですが、pandasを組み合わせることで、より柔軟かつ効率的にデータを集約できます。用途やデータ規模に応じて、両者の使い分けを検討してみてください。

  1. Pythonのbase64モジュールを使ったデータエンコード・デコード入門

    PythonにおけるBase64エンコーディングとはPython標準ライブラリのbase64モジュールは、バイナリデータをプレーンテキスト(ASCII)プロトコルで安全に送信できる形式へ変換するための機能を提供します。メール送信、URLへの埋め込み、HTTP POSTリクエストなど、テキストベースの通信経路でバイナリデータを扱いたい場面で活躍するモジュールです。このモジュールが実装しているのは、RFC 3548で定義されたBase16、Base32、Base64の各アルゴリズム、および事実上の標準となっているAscii85とBase85のエンコーディングです。RFC 3548準拠のエンコーディ

  2. Pythonで複数のファイル名を一括変更する方法【os.rename()活用】

    Python3では、rename()メソッドを使うことで、ファイルやディレクトリの名前を簡単に変更できます。このメソッドは標準ライブラリのosモジュールに含まれており、追加のインストールなしですぐに利用可能です。 os.rename() の基本構文 os.rename(src, dst) 各引数の意味は以下のとおりです。 src: 名前を変更したい元のファイル(またはディレクトリ)のパス dst: 変更後の新しい名前を含むパス それでは、複数の画像ファイルが入ったフォルダを例に、一括でファイル名を変更する方法を見ていきましょう。ここでは、次のような画像フォルダを使用します。 入力(変更前の