【第47回PYTHON講座】ファイルへのデータ追記方法

PYTHON

みなさん、こんにちは。
今回はファイルへのデータ追記方法を紹介しようと思います。

テキストファイルの追記方法

テキストファイル file02.txt のデータを、同じテキストファイル file01.txt に追記するコードです。

file_a = "C:/Labo/file01.txt"
file_b = "C:/Labo/file02.txt"

with open(file_b, "r", encoding='utf-8') as f:
    ls = f.readlines()

with open(file_a, "a", encoding='utf-8') as f:
    f.writelines("\n")
    f.writelines(ls)
4行目 追記するデータのファイルの読み込み
with open(file_b, "r", encoding='utf-8') as f:

with でファイルを開くと、閉じる処理の close は書く必要がありません

encodingはテキストファイルのコーディングのタイプです。半角英数字のファイルの場合、encodingのオプションは不要ですが、日本語が含まれている場合は、指定する必要があります。utf-8の他には、shift_jiseuc_jpiso2022_jpなどがあります。テキストファイルがどのコーディングで書かれているかに合せて変更して下さい。解からない場合は、これらの4つのコーディングをそれぞれ記載して、試してみると簡単です。

7行目 追記先のファイルを開く
with open(file_a, "a", encoding='utf-8') as f:

”a” は append(追記)の略です。追記するので、追記モードでファイルを開きます。

8行目 改行を追記する

追記先のデータに改行がなければ、既存のデータの最終点から新たなデータが追記されます。改行が必要な場合は、下記を追記して下さい。

  f.writelines("\n")

CSVファイルの追記方法

CSVファイルはテキストファイルに数値をコンマ等で区切って入力したファイルのことを指し、基本的にはテキストファイルになります。その為、先述のテキストファイルの追記方法でも出来ますが、pandasを使うと簡単です。

CSVファイル file02.csv のデータを、同じくCSVファイル file01csvに追記するコードです。

import pandas as pd

file_a = "C:/Labo/file01.csv"
file_b = "C:/Labo/file02.csv"

df = pd.read_csv(file_b)
df.to_csv(file_a, mode='a', index=False)
5行目 追記するCSVファイルを読み込む
df = pd.read_csv(file_b)

追記するCSVデータを読み、データフレーム df に代入します。

6行目 追記されるCSVファイルに書き込む
df.to_csv(file_a, mode='a', index=False)

mode=’a’ とすることにより、追記する形式で書き込むます。

index=False としないと、1列目に自動で1から数字が代入されます。なので、そのまま追記したい場合は、index=Falseとして下さい。

エクセルファイルに追記

エクセルファイルに追記する場合、『openpyxl』というライブラリをインストールします。但し、コード上では定義する必要はありません。インストールする為に、下記のコマンドを実行して下さい。

pip install openpyxl

XLSMファイル file02.xlsm のデータを、同じくXLSMファイル file01.xlsmに追記するコードです。

エクセルファイルの場合、追記というのではなく、それぞれのデータを合体させて、ファイルに新たに書き込むという手段になります。

import pandas as pd

file_a = "C:/Labo/file01.xlsm"
file_b = "C:/Labo/file02.xlsm"

df = pd.read_excel(file_a, header=None)
df2 = pd.read_excel(file_b, header=None)
df3 = pd.concat([df, df2])

with pd.ExcelWriter(file_a) as writer:
    df3.to_excel(writer, sheet_name='Sheet1', index=False, header=None)
6~8行目 データの読み込みと結合

それぞれのファイルのデータをデータフレーム df、df2 に代入します。

header=None といのは、データにヘッダーが無い場合を指します。

pd.concatを使って、データフレーム df、df2を結合し、データフレーム df3とします。当然ながら、df2, dfと順番を変えると、データフレームの並びが異なってくるので、追記したいもの df2 は最後に指定してください。

11,12行目 データの書き込み

追記するのではなく、結合したデータフレーム df3 を上書きする形となります。

エクセルファイルになるので、どのシートに記載するかを sheet_name=’Sheet1′ で指定します。

index、headerが無い場合は、index = False、header = Noneとします。

LibreOffice ODSファイルに追記

LibreOffice ODFファイルに追記する場合、『odfpy』というライブラリをインストールします。但し、コード上では定義する必要はありません。インストールする為に、下記のコマンドを実行して下さい。

pip install odfpy

ODSファイル file02.ods のデータを、同じくODSファイル file01.odsに追記するコードです。

import pandas as pd

file_a = "C:/Labo/file01.ods"
file_b = "C:/Labo/file02.ods"

df = pd.read_excel(file_a, engine="odf", header=None)
df2 = pd.read_excel(file_b, engine="odf", header=None)
df3 = pd.concat([df, df2])

with pd.ExcelWriter(file_a, engine="odf") as writer:
    df3.to_excel(writer, sheet_name='Sheet1', index=False, header=None)

基本的は、先述のエクセルファイルと同じですが、engine=”odf” というオプションが付きます。

まとめ

いかだったでしょうか。

統計データをまとめる場合に、新しいファイルを既存のファイルに追記していくことになりますが、データが多い場合、上記のようにプログラムでまとめると楽だと思いますので、是非、試してくださいね。

役に立った!」と思れましたら、下のSNSボタンで記事のシェアをしていただけると嬉しいです!

コメント

タイトルとURLをコピーしました