うどん県出身グーナーの呟き

神奈川県在住のグーナーです。プログラムをやっているので勉強していることや作った便利ツールを公開したいと思います。

【Python】【サンプルコード】実際の用途別チートシート を作ってみたよ【複数ファイル、ディレクトリ削除、作成、書き込み、読み込み編】

実際の用途別チートシート を作ってみたよ【複数ファイル削除、作成、書き込み、読み込み(File I/O)編】

概要

たまに使うと忘れがちなファイル書き込み、読み込み

大体そういう時は複数の(大量の)ファイルやディレクトリを作成したり、削除したり、読み込んだりと、

調べるにしてもいくつかに分けて検索する必要があり、意外と大変。

その後にはmatplotlibやpandasも毎回調べるし。

そんなときにとりあえずコピペしておけば動くそんなコードをまとめたシートになります。

なお、ここでは一機能の説明ではなく、実際の用途ごとにまとめてあります。

各関数ごとの細かい機能は下の関数ごとのリンク先か別途Google先生で確認してください。

随時更新中

このチートシートで使われているライブラリ一覧

ファイル、ディレクトリ探索

glob

ファイル、ディレクトリ存在確認

os.path系

ディレクトリ作成

os.mkdir

ディレクトリ削除

os.remove

複数(大量)の同じ名前のファイルを作成

データをロギングする、タイムスタンプで区切って別々のファイルに分割する。

意外と使うことが多い、ファイル名 = 名前+インデックス+拡張子(.csvなど) での複数(大量の)ファイル作成

そのときは以下のコードを使いましょう。

path = "./data/"
filename = "sample"
filetype = ".csv"
filenum = 10

for i in range(filenum):
    open_filename = path + filename + str(i) + filetype
    with open(open_filename, mode='w') as f:
        f.write("1,1,1,1")

これであなたも大量にファイルを製造できちゃう!!

複数(大量)の同じ名前のファイルを作成(ヘッダー付きCSV)

ちなみにCSVファイルを作る際には各行の最後に","をつけたくなりますが、つけないことをオススメします。

それはpandasで読み込むときに無駄に1列、列に追加されてしまうからです。

path = "./data/"
filename = "sample"
filetype = ".csv"

header = "timestamp, data1, data2\n"

for i in range(10):
    open_filename = path + filename + str(i) + filetype
    with open(open_filename, mode='w') as f:
        f.write(header)
        for j in range(10):
            timestamp_str = str(j)
            str_data = timestamp_str + ",1,1"
            f.write(str_data)
            f.write("\n")

複数(大量)の同じ名前のディレクトリ(フォルダ)にファイルを作成する場合

正直インデックスで分ければいいじゃんと思うかもしれないが、たまに水準を振って、同じファイル名で保存したいときがある。

そんなときはファイル名はそのままで、複数のディレクトリを作成し、分けて入れてあげましょう。

import os

path = "./data/"
filename = "sample"
filetype = ".csv"

header = "timestamp, data1, data2\n"

for i in range(10):
    dir_path = path + filename + str(i)
    if os.path.exists(dir_path) == False:
        os.mkdir(dir_path)

    open_filename = dir_path + "/" + filename + filetype
    with open(open_filename, mode='w') as f:
        f.write(header)
        for j in range(10):
            timestamp_str = str(j)
            str_data = timestamp_str + ",1,1\n"
            f.write(str_data)

複数(大量)の同じ名前のファイルを削除

逆に大量のファイルを通流前は一度ディレクトリの中をきれいにしたくなりますよね。

そんなときは以下のコードを使いましょう。

import os
import glob

path = "./data/"
file_type = ".csv"
filenames = glob.glob(path + "*" + file_type)

for filename in filenames:
    os.remove(filename)

指定ディレクトリ以下の同じ拡張子のファイルを削除する

複数のディレクトリに渡ってデータを保存しているとき、一度きれいにしたくなることがありますよね。

そんなときは以下のコードを実行しましょう。

import os
import glob

path = "./data/"
file_type = ".csv"
filenames = glob.glob(path + "**/*" + file_type)
for filename in filenames:
    os.remove(filename)

指定ディレクトリ以下のすべてのファイル、ディレクトリを削除する

とりあえず問答無用で全部削除してまっさらにしたい!! そんなときありますよね。

そんなときは以下のコードを実行しましょう。

import shutil
import os

path = "./data/"
if os.path.exists(path):
    shutil.rmtree(path)
os.mkdir(path)

CSVファイルを読み込んで配列に格納する

とりあえず文字列でいいからデータの中身を確認したい。

そんなときは以下のコードを使ってください。

path = "./data/"
filename = "sample0.csv"

with open(path + filename, mode='r') as f:
    line = f.readline()
    while line:
        line = line.replace('\n','')
        str_data = line.split(',')
        print(str_data)

        line = f.readline()

CSVファイルを読み込んで数値として配列に格納する

数値として配列に格納してささっとグラフを書きたい。

そんなときは以下をどうぞ。

path = "./data/"
filename = "sample0.csv"

with open(path + filename, mode='r') as f:
    line = f.readline() # headerをスキップ
    line = f.readline()
    while line:
        line = line.replace('\n','')
        str_data = line.split(',')

        data = [int(x) for x in str_data]
        print(data)

        line = f.readline()
/*コードブロックに言語名を表示*/ pre.code:before { content: attr(data-lang); display: inline-block; background: white; color: #666; padding: 3px; position: absolute; margin-left: -10px; margin-top: -30px; } pre.code { padding-top: 30px !important; }