ディレクトリに対する Python の操作では、組み込み関数 os および os.path を使用する必要があります。
この章の内容
3. ディレクトリまたはファイルが存在するかどうかを確認する
モジュールの説明
osモジュール機能
関数 | 例証する |
getcwd() | 現在の作業ディレクトリを返す |
listdir(パス) | 指定されたパスの下にあるファイルとディレクトリの情報を返します |
mkdir(パス[,モード]) | ディレクトリを作成する |
makedirs(パス1/パス2....[,モード]) | マルチレベルのディレクトリを作成する |
rmdir(パス) | ディレクトリを削除 |
削除されたirs(パス1/パス2) | マルチレベル ディレクトリの削除 |
chdir(パス) | 現在の作業ディレクトリへのパスを設定します |
walk(トップ[、トップダウン[、エラー]]) | このメソッドは、ディレクトリ ツリーを走査して、すべてのパス名、すべてのディレクトリ リスト、およびファイル リストの 3 つの要素を含むタプルを返します。 |
os.path モジュール関数
関数 | 例証する |
abspath(パス) | ファイルまたはディレクトリの絶対パスを取得するために使用されます |
存在する(パス) | ディレクトリまたはファイルが存在するかどうかを判断するために使用され、存在する場合は True を返し、存在しない場合は False を返します |
参加(パス、名前) | ディレクトリまたはファイル名でディレクトリを連結 |
スプリットテキスト() | ファイル名と拡張子を分ける |
ベース名(パス) | ディレクトリからファイル名を抽出する |
ディレクトリ名(パス) | ファイル名を除いて、パスからファイルパスを抽出します |
isdir(パス) | パスが有効かどうかを判断するために使用されます |
詳細な操作
1.相対パスを問い合わせる
# 現在の相対パスを問い合わせる
import os
print(os.getcwd())
操作結果:
2.絶対パスを問い合わせる
import os
print(os.path.abspath(r"text.txt"))
操作結果:
3. ディレクトリまたはファイルが存在するかどうかを確認する
存在する機能
絶対パスまたは相対パスを使用できます
戻り値: False は存在しないことを意味する True は存在することを意味する
ファイルまたはディレクトリを特定できる
import os
print(os.path.exists("C:\\demo"))
4. ディレクトリを作成する
注: 指定されたディレクトリに複数のレベルがあり、最終レベルの上位ディレクトリが存在しない場合、FileNotFoundError 例外エラーがスローされ、作成に失敗します. 解決策: 1. 複数レベルのディレクトリを作成します. 2.再帰関数呼び出し os.mkdir 関数の実装を記述します。コードは次のとおりです。
os.path.split('PATH') # 2 つのタプルに分割されます。1 つのタプルはパスで、もう 1 つは作成されたファイル名です
1.PATHは、ファイルのフルパスをパラメータとして参照します
2. ディレクトリとファイル名が指定されている場合は、パスとファイル名を出力します
3. ディレクトリ名が指定されている場合、出力パスとファイル名は空です
import os # 导入函数
def mkdir_file(path): # 定义递归创建目录函数
if not os.path.exists(path): # 判断是否为有效路径
mkdir_file(os.path.split(path)[0]) # 递归函数调用
else: # 目录存在则直接返回
return
os.mkdir(path) # 创建目录
mkdir_file("D:\\test\\文件操作\\test") # 调用mkdir()递归函数
# 注意 要用 \ 转义一下
5. 複数レベルのディレクトリを作成する
os.mkdir は第 1 レベルのディレクトリを作成します os.makedirs はディレクトリを再帰的に作成するために使用されます
フォーマット:
os.makedirs(file_name,mode=0o777)
パラメータの説明:
file_name : 作成するディレクトリを指定するために使用します。絶対パスまたは相対パスを使用できます
mode: 数値モードを指定するために使用されます。デフォルトは 0o777 です。UNIX 以外のシステムでは、このパラメーターは無効であるか、無視されます。
使用法:
import os
os.makedirs("D:\\test\dir\test\test") # 创建多级目录
6. ディレクトリの削除
ディレクトリを削除するには os.rmdir() 関数を使用します. ここで削除できるのは空のディレクトリのみです. 内容のあるディレクトリを削除したい場合は, 組み込み関数 shutil を使用する必要があります. 2つの書き方を示します.下
import os
os.rmdir("D:\\test\test") # 删除空目录 “\”转义
import shutil
shutil.rmtree("D:\\test") # 删除非空目录
7. ディレクトリのトラバース
ディレクトリのトラバースとは、指定したディレクトリ配下のすべてのディレクトリを、サブディレクトリやファイルなども含めて表示することです。 os モジュールでは、ディレクトリをトラバースする機能を実現するために walk 関数を使用し、それをタプルの形式で返します。
フォーマット:
os.walk(top,[topdown],[onerror],[followlinks])
パラメータの説明:
top: コンテンツをトラバースするルート ディレクトリを指定するために使用されます
topdown: トラバーサルの順序を指定するために使用されるオプションのパラメーター。値が True の場合はトップダウンを意味します False はボトムアップを意味します
onerror: The optional parameter is used to specify the error handling method. デフォルトは無視されます. 無視したくない場合は、通常はデフォルトを使用してエラー処理関数を指定できます.
followlinks: オプションのパラメータ. デフォルトでは, walk 関数はディレクトリに解決されたシンボリック リンクにはなりません. パラメータを True に変更します.これは、サポートされているシステム上のシンボリック リンクが指すターゲットへのアクセスを指定するために使用されることを示します. .
# 例
import os
file = os.walk("test") # 遍历当前目录下的test目录
for i in file: # 循环 遍历的目录 直接打印 遍历的目录是出不来的
print(i)
操作結果:
高度なファイル操作
osモジュールが提供するファイル関連の機能と説明
関数 | 例証する |
アクセス(パス、アクセスモード) | ファイルが指定されたアクセス許可 (読み取り、書き込み、実行) を持っているかどうかを取得します。accessmode の値は、R_OK (読み取り)、W_OK (書き込み)、X_OK (実行)、F_OK (存在) です。権限が指定されていない場合は 1、それ以外の場合は 0 を返します |
chmod(パス、モード) | ファイル アクセス許可を変更する |
削除 (パス) | パスで指定されたファイル パスを削除します |
名前の変更 (src,dst) | ファイルまたはディレクトリの名前を src から dst に変更します |
stat(パス) | パスで指定されたファイルに関する情報を返す |
startfile(パス,[操作]) |
関連付けられたアプリケーションでパスで指定されたファイルを開きます |
1.ファイルを削除する
import os
os.remove("test.txt") # 删除文件test.txt 可以加路径但是要加 转义字符“\”
2. ファイルとディレクトリの名前を変更する
import os
# 修改文件
src = "test\\01\\TEST.txt" # 要修改的文件名称
dst = "test\\01\\Test.txt" # 修改后的文件名称
os.rename(src, dst) # 执行修改 先是要修改的文件名称 然后是修改的文件名称
# 修改目录
catalog = "test\\01" # 要修改的目录名称
catalog1 = "test\\66" # 修改后的目录名称
os.rename(catalog,catalog1)
基本的なファイル情報を取得する
os.stat 関数は、基本的なファイル情報 (ファイル サイズ、最終アクセス時刻、最終変更時刻、最終状態変更時刻、インデックス番号、デバイス名) およびその他の情報を取得するために使用されます。注: 直感的に理解するには、フォーマット変換が必要です
プロパティの説明
属性 | 例証する |
st_mode | 保護モード |
st_dev | 機器名 |
st_ino | インデックス番号 |
st_nlink | ハードリンク数(リンク数) |
st_size | ファイル サイズ (バイト) |
st_mtime | 最終更新時刻 |
st_uid | ユーザーID |
st_gid | グループID番号 |
st_atime | 最終訪問時間 |
st_ctime | 最後の状態変化の時刻。システムが異なれば、返される結果も異なります。たとえば、Windows では、ファイルの作成時刻が返されます。 |
# 例:
ファイルのインデックス番号、デバイス番号、ファイルサイズ、最終アクセス時刻、最終更新時刻、最終状態変更時刻を表示
変換と非変換を示す 2 つの方法の比較
import os
fileinfo = os.stat("test\\02\\test.txt")
# 输出文件的基本信息
print("未转换显示内容".center(50, "-"))
print("索引号:", fileinfo.st_ino)
print("设备名:", fileinfo.st_dev)
print("文件大小:", fileinfo.st_size, "B")
print("最后一次访问时间:", fileinfo.st_atime)
print("最后一次修改时间:", fileinfo.st_mtime)
print("最后一次状态变化时间:", fileinfo.st_ctime)
import time
def FormatTaime(longtime):
"""
格式化日期的函数
logtime:要格式化的时间
"""
return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(longtime)) # 导入时间模块 并以 年月日 时分秒的形式显示
def formatByte(number):
"""
格式化文件大小的函数
number:要格式化的字节数
"""
for (scale, labei) in [(1024 * 1024 * 1024, "GB"), (1024 * 1024 * 1024, "MB"), (1024, "KB")]:
# scale 第一次循环为 :1,073,741,824 labei 第一次循环结果为:GB
if number >= scale: # 如果文件大小 大于 等于 1KB
return "%.2f %s" % (number * 1.0 / scale, labei) # %.2f :格式化输出
elif number == 1: # 如果文件小于1B
return "1 B"
else: # 处理小于1b的文件
byte = "%.2f" % (number or 0)
return (byte[:-3] if byte.endswith('.00') else byte) + "B"
print("已转换显示内容".center(50, "-"))
print("索引号:", fileinfo.st_ino)
print("设备名:", fileinfo.st_dev)
print("文件大小:", formatByte(fileinfo.st_size))
print("最后一次访问时间:", FormatTaime(fileinfo.st_atime))
print("最后一次修改时间:", FormatTaime(fileinfo.st_mtime))
print("最后一次状态变化时间:", FormatTaime(fileinfo.st_ctime))
操作結果: