Python_ファイル書き込み

ファイル書き込み

ファイルのオープン

ファイルの読み書きを行うには、open()を使い、ファイルを開いてファイルの中身にアクセスできる状態にします。

オープンモードは下記の指定が可能です。

モード 動作
r 読み込みモードで開く。ファイルが存在しない時はエラーになる。
w 書き込みモードで開く。ファイルが存在しない時は新規作成される。
a 追加書き込みモードで開く。ファイルが存在しない時は新規作成される。
r+ 読み書き両対応で開く。ファイルが存在しない時はエラーになる。
w+ 読み書き両対応で開く。ファイルが存在しない時は新規作成される。
a+ 追加書き込み・読み書き両対応で開く。ファイルが存在しない時は新規作成される。

ファイルへの書き込み


#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8


import sys
import argparse


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-f", help="target filename", required=True)
    args = parser.parse_args()

    # ファイルを開く
    fd = open(args.f, 'w')

    # 文字列を書き込む
    fd.write("python")

    # ファイルを閉じる
    fd.close()


if __name__ == "__main__":
    sys.exit(main())

withの利用

withを使うとclose()漏れを防ぐことができます。


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-f", help="target filename", required=True)
    args = parser.parse_args()

    # ファイル書き込みを行う。
    with open(args.f, mode = 'a', encoding = 'utf-8') as fd:
        fd.write("python")


if __name__ == "__main__":
    sys.exit(main())

配列をファイルに出力する

writelines()を用いることで全ての配列要素をファイルに書き込むことができます。

要素間で改行コードは付加されないことに注意が必要です。。


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-f", help="target filename", required=True)
    args = parser.parse_args()

    # 配列を書き込む
    strings = ["str1", "str2", "str3"]
    with open(args.f, mode = 'w', encoding = 'utf-8') as fd:
        fd.writelines(strings)  # "str1str2str3"

配列単位で改行するには改行コードを付加します。


    strings = ["str1", "str2", "str3"]
    with open(args.f, mode = 'w', encoding = 'utf-8') as fd:
        fd.write("\n".join(strings))

バイナリデータの書き込み

バイナリデータを扱う場合、open()モードに「b」を付加します。


#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8


import sys
import argparse


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-f", help="target filename", required=True)
    args = parser.parse_args()

    with open(args.f, "wb") as fd:
        b_ary = bytearray([0x01, 0xFF, 0x1A])
        b_ary.append(0x00)
        b_ary.extend([0xA1, 0xFF])
        fd.write(b_ary)  # 01 ff 1a 00 a1 ff

if __name__ == "__main__":
    sys.exit(main())


関連ページ