Pythonのos.listdir()で隠しファイルを除外する方法【Windows・Mac・Linux対応】
Pythonでos.listdir()を使ってディレクトリ内のファイル一覧を取得する際、隠しファイル(ドットファイルなど)まで一緒に表示されてしまうことがあります。この記事では、OSごとの違いに対応しながら、隠しファイルを除外したファイルリストを取得する方法を解説します。
OSによる隠しファイルの扱いの違い
隠しファイルの判定方法は、OSによって大きく異なります。
- Unix系OS(macOS、Linuxなど):隠しファイルはファイル名が「
.」(ドット)で始まるという規則があります。そのため、単純にstartswith()メソッドで判定できます。 - Windows:ファイル名ではなく、ファイル属性(FILE_ATTRIBUTE_HIDDENなど)によって隠しファイルかどうかが決まります。そのため、
win32apiを使ってファイル属性を確認する必要があります。
実装例:隠しファイルを除外したファイル一覧の取得
以下のコードは、実行環境のOSを自動判別し、隠しファイルを除外したファイルリストを取得する例です。
import os
# Windowsの場合のみwin32apiを読み込む
if os.name == 'nt':
import win32api, win32con
def file_is_hidden(p):
"""指定されたパスが隠しファイルかどうかを判定する"""
if os.name == 'nt':
# Windows: ファイル属性をチェック
attribute = win32api.GetFileAttributes(p)
return attribute & (win32con.FILE_ATTRIBUTE_HIDDEN | win32con.FILE_ATTRIBUTE_SYSTEM)
else:
# Linux / macOS: ドットで始まる名前を隠しファイルとみなす
return p.startswith('.')
# 隠しファイルを除外してファイルリストを作成
file_list = [f for f in os.listdir('.') if not file_is_hidden(f)]
print(file_list)コードのポイント解説
1. OSの判別にはos.nameを使用
os.nameは、Windows環境では'nt'、Unix系OSでは'posix'を返します。この値を見て、必要なモジュールや判定ロジックを切り替えています。
2. Windowsでの属性チェック
win32api.GetFileAttributes()はファイルの属性フラグを返します。win32con.FILE_ATTRIBUTE_HIDDEN(隠しファイル属性)とwin32con.FILE_ATTRIBUTE_SYSTEM(システムファイル属性)をビット演算(AND)で組み合わせることで、両方の属性を持つファイルも正しく検出できます。
3. リスト内包表記でフィルタリング
[f for f in os.listdir('.') if not file_is_hidden(f)]により、隠しファイルではない項目だけを効率的に抽出しています。
注意点
- Windowsでこのコードを実行するには、
pywin32パッケージが必要です。pip install pywin32でインストールできます。 - より現代的なアプローチとしては、Python 3.5以降で利用できる
pathlib.Path.iterdir()や、Python 3.11以降のos.listdir()と組み合わせたpathlib.Path.is_file()などの活用も検討するとよいでしょう。
この方法を使えば、クロスプラットフォームで動作する、隠しファイルを除外したファイル一覧取得処理を実装できます。
-
PythonでPowerPointファイルを自動作成する方法!python-pptxの基本を徹底解説
はじめに誰もが一度はPowerPointのプレゼンテーション資料を作成した経験があるのではないでしょうか。多くの場合、Microsoft PowerPointやGoogleスライドといったGUIツールを使うことが多いでしょう。しかし、ライセンスを持っていなかったり、インターネット環境にアクセスできなかったりすることもあります。あるいは、「プログラマーらしく」コードで自動生成したいと考える方もいるはずです。ご安心ください。そんなときこそPythonの出番です!この記事では、Pythonを使ってPowerPointファイルを作成し、コンテンツを追加する方法を解説します。それでは早速始めましょう!準
-
Pythonで複数のファイル名を一括変更する方法【os.rename()活用】
Python3では、rename()メソッドを使うことで、ファイルやディレクトリの名前を簡単に変更できます。このメソッドは標準ライブラリのosモジュールに含まれており、追加のインストールなしですぐに利用可能です。 os.rename() の基本構文 os.rename(src, dst) 各引数の意味は以下のとおりです。 src: 名前を変更したい元のファイル(またはディレクトリ)のパス dst: 変更後の新しい名前を含むパス それでは、複数の画像ファイルが入ったフォルダを例に、一括でファイル名を変更する方法を見ていきましょう。ここでは、次のような画像フォルダを使用します。 入力(変更前の