Python File: ファイルの操作(Read, Write, Exists)

Table of Contents

Table of Contents

Python3で下記のファイルの操作方法を紹介します。

  • ファイルの読み取り(read)と書き込み(write)
  • フォルダ内のファイル一覧
  • ファイル名の変更
  • ファイルが存在しているかの確認


ファイルの読み取り(read)と書き込み(write)

Pythonでは、ファイルのタイプは text と binary の二つに分けます。

ファイルの書き込みと読み取りもopen関数で実現できます。

file = open("file_path", "mode")

...(読み書き処理)

file.close()

上記の記述で、openでファイルを開けます。最後にclose関数でクローズするのを忘れないようにしてください。

modeの部分、

  • 'r' : read。閲覧モード。
  • 'w' : write。編集モード。
  • 'a' : append。ファイルの末尾に内容を追加するモード。
  • 'r+' : read + write。閲覧と編集モード。
  • 'x' : create。 新しいファイルを作成する。ファイルがすでに存在する場合はエラーが発生します。


Write

file = open('/path_to_file/file_name', 'r')

file.write("新規のファイルです。")
file.write("新しい内容を追加します。")
file.write("ここは三行目です。")

file.close()

手動でファイルを閉じたいなら、close関数で閉じることはできます。

withと一緒に使うのをお勧めします。処理終了後に自動的にファイルを閉じるので、手動でclose()の必要はなくなります。

with open('/path_to_file/file_name', 'w') as file:
    file.write("新規のファイルです。")
    file.write("新しい内容を追加します。")
    file.write("ここは三行目です。")



Read

file = open('/path_to_file/file_name', 'r')

# ファイルの内容を全部出力する
print(file.read())

# ファイルの5番目文字までの内容を出力する
print(file.read(5))

# ファイルの1行目までの内容を出力する
print(file.readline())

# ファイルの1行目の3番目文字まで内容を出力する
print(file.readline(3))

# ファイルの一行ずつの内容を配列で出力する
print(file.readlines())
# > ['新規のファイルです。', '新しい内容を追加します。', 'ここは三行目です。']

f.close()

文字ファイルの操作応用上には、一行ずつ操作していく場合よくあります。その時に、下記のやり方を使えると思います。


with open(path) as f:
  for line in f:
    print(line) // 文字列を出力する
    print(len(line)) // 文字列の長さを出力する
    // ...他の操作、例えば、文字の置換など

ループ内、今何行目をやっているの(ループのindex)を知りたい場合、enumerate関数を使えば良いと思います。

with open(path) as f:
  for index, line in enumerate(f):
    print(index) // indexを出力する
    print(line) // 文字列を出力する
    // ...他の操作、例えば、文字の置換など


ファイル一覧

osglobのモジュールを使えば、ファイル一覧の取得はできます。

osモジュール

import os

list = os.listdir("path")
print(list)



globモジュール

import glob

files = glob.glob('path/*.txt')
print(files)

glob では、'?', '*'などの表現ができますので、ある程度の条件指定は可能です。例えば、ファイル種類(txt, csv, pdfなど)の指定はできます。



ファイル名の変更

os モジュールでファイル名の変更はできます。

import os

# os.rename('/path/original_file_name.type', '/path/new_file_name.type')
os.rename('/tmp/user.txt', '/tmp/customer.txt')



ファイルが存在しているかの確認

open関数やosモジュール、どちらでも確認できます。



open関数

try:
    with open('file_name') as f:
        print(f.readlines())
except IOError
    print("ファイルにアクセスできません")



osモジュール

os.pathパスが存在しているかファイルかフォルダーかの確認ができます。

  • os.path.exists(path) : true/falseの結果を返す
  • os.path.isfile(path) : true/falseの結果を返す
  • os.path.isdir(path) : true/falseの結果を返す
import os

os.path.exist('/path/of/file')