Pythonを使っていると複数のコードで共通して使用しているコードがあることに気付きます。その作業を完全に覚えていればいいのですが毎回ウェブで調べてコードを記述して、とすると目的の作業は同じなのにシートごとにコード記述方法が違ってしまい見にくくなってしまいます。
そんなことを解消するのが「Pythonチートシート」です。
今回は「 フォルダ中のファイル一覧を取得してcsvファイルに出力する 」コードを紹介します。
◆ Mac OS
◆ Python 3
◆ JupyterLab
前準備 フォルダの作成
このコードの実行によりファイル名を読み込むフォルダ・ファイルはこのJupyterLabで作成した「.ipynb」ファイルとの相対パスで場所を示します。
今「.ipynb」を保存しているフォルダと同じ階層に「input」と「output」というフォルダを作成してください。そして「input」フォルダの中には[test1.txt], [test1.txt], [test1.txt]の3つのテキストファイルを作成して保存してください。
任意のフォルダ - .ipynb (ファイル) - input (フォルダ) -- test1.txt (ファイル) -- test2.txt (ファイル) -- test3.txt (ファイル) - output (フォルダ)
コード: フォルダ中のファイル一覧を取得してcsvファイルに出力する
それでは実際に「 フォルダ中のファイル一覧を取得してcsvファイルに出力する 」コードを紹介します。
import pandas as pd
import glob
# フォルダ内のファイル名をすべて読み込む
file_list1 = glob.glob('./input/*')
# ファイル名のみを取り出す方法
# 空listの作成
file_list2 = []
# listに出力
for file_name in file_list1:
file_list2.append(file_name[8:])#この数字はpathが現れるように使用する環境に合わせて調整してください
file_list2
# pandas dfに出力
df = pd.DataFrame(file_list2, columns=['file_name'])
df
# dfをcsvファイルに保存
df.to_csv('./output/get_filename-output_csv.csv', index=False)
上記のコードでは、「csvファイルに保存する」作業までを行なっておりますが、用途に応じてその途中の「pandas dfに出力」や「listに出力」などで止めて自由に使ってください。
コードの解説
以下に各コードごとの処理について解説していいきます。
globでファイル名の取得
globとは、pythonのモジュールの1つです。globとは英語で「かたまり」という意味があります。pythonでは、glob関数を使うことで特定のパターンにマッチするファイルを取得することができます。
glob関数にファイルのマッチング条件を引数として与えると、その条件にマッチしたファイルを返してくれます。つまり、今回のように特定条件に従ったファイルを取得したいときにglobを使います。
import pandas as pd
import glob
# フォルダ内のファイル名をすべて読み込む
file_list1 = glob.glob('./input/*')
#> ['./input/test1.txt', './input/test2.txt', './input/test3.txt']
上のコードは、file_list1にinputフォルダ中に存在する全てのファイル名を取得します。相対パスでフォルダを指定しており* (アスタリスク)は全てのファイルを意味します。現段階では上記を実行したのみでは出力結果として、['./input/test1.txt', './input/test2.txt', './input/test3.txt']と相対パスの情報が返ってきます。
スライスで文字列を抽出
[start:step]とすると、start <= x < stopの範囲の文字列が抽出できます。インデックスは0始まりでstartを省略すると先頭から、endを省略すると末尾までの範囲となります。
# ファイル名のみを取り出す方法
file_list2 = []
for file_name in file_list1:
file_list2.append(file_name[8:])#pathが現れるように使用する環境に合わせて調整してください
file_list2
#> ['test1.txt', 'test2.txt', 'test3.txt']
まず空リストを作成してそこに「スライス」で取り出したファイル名を保存します。forループの中ではfile_list1のリストからパス付きのファイル名を一つずつfile_nameとして取り出します。ここで取り出されるものは`./input/test1.txt`の形です。ファイル名はこの取り出したものの先頭から8文字目以降のためfile_name[8:]と書くことで「スライス」してファイル名のみを取り出すことができます。
pandas dataframe出力およびcsv出力
上記で得られたlist形式のファイル名一覧をpandas dataframeおよびcsv形式で出力します。
# pandas dfに出力
df = pd.DataFrame(file_list2, columns=['file_name'])
df
# dfをcsvファイルに保存
df.to_csv('./output/get_filename-output_csv.csv', index=False)
pd.DataFrame()でpandas dataframe形式にlistを変換し、この時にcolumns=['xxx']でcolumn名を指定しております。
csv形式への出力はdf.to_csv(ファイルパス)で設定します。ここではoutputフォルダにget_filename-output_csv.csvというファイル名のcsv fileを出力しております。
最後に
「Pythonチートシート」で毎回よく使う作業のPythonコードをまとめ、今回は「 フォルダ中のファイル一覧を取得してcsvファイルに出力する 」コードを紹介しました。
他にもいろいろなチートシートを用意しておりますので以下から確認してみてください。




コメント
[…] てコードを記述して、とすると目的の作業は同じなのにシートごとにコード記述方法が違ってしまい見にくくなってしまいます。 そんなことを解消するのが「Pythonチートシート」です。 […]