ray88’s diary

お仕事で困ったとき用の自分用の覚書

Python ファイルパスをraw文字列、Pathlib で読み取る

python 目次 - ray88’s diary

Pythonにおけるバックスラッシュの意味
Pythonでは、文字列内でバックスラッシュ `\` はエスケープシーケンスの開始を意味する。
エスケープシーケンスは、通常の文字列の範囲で表現できない特殊な文字を表すために使われる。
たとえば、`\n` は改行を、`\t` はタブを表す。


ファイルパスのバックスラッシュをそのままの文字として扱うには
ファイルパスのような場面でバックスラッシュをそのままの文字として扱いたい場合があります。
このとき、以下の2つの方法が一般的に用いられる

1. 「pathlib」モジュールを使用する
pathlib を使用すると、パスをオブジェクトとして扱えるため、
パスに関する多くの操作が簡単かつ直感的に行えます。
例えば、ファイルの存在確認、ディレクトリの作成、パスの結合、ファイルの拡張子の取得などが
メソッドチェーンで簡単に実行できます。

pathlib の利点
・パスをオブジェクトとして扱えるため、コードが読みやすく、理解しやすい。
・パスの構成要素に簡単にアクセスできる(例:.stem, .suffix, .parent など)。
ファイルシステムの操作がメソッドとして提供される(例:.exists(), .is_file(), .is_dir() など)。
・OSに依存しないパス操作が可能で、クロスプラットフォームスクリプトの作成に適している。
・スラッシュ / を使って簡単にパスを結合できる。

2. バックスラッシュをダブルバックスラッシュ `\\` として記述する。
3. 文字列の前に `r` または `R` を付けて、生(raw)文字列として扱う。

生文字列では、バックスラッシュがエスケープシーケンスとして処理されず、
文字列内で見た通りの値として扱われため、Windowsのファイルパスを扱う際などに特に有用です。

(例)「pathlib」モジュールを使用する:

from pathlib import Path
# Path オブジェクトを使用してファイルパスを指定
path = Path("C:/Users/ユーザ名/Desktop/test/test.xlsx")

(例)Windowsのファイルパスを通常の文字列として扱うとき:

path = "C:\\Users\\ユーザ名\\Desktop\\test\\test.xlsx"

(例)生文字列を使うとき:

path = r"C:\Users\ユーザ名\Desktop\test\test.xlsx"

生文字列を使うと、コードが読みやすくなり、ファイルパスなどのエスケープシーケンスを含まない文字列を記述する際に便利です。

サンプルコード
その1

from pathlib import Path
import openpyxl
# Path オブジェクトを使用してファイルパスを指定
path = Path("C:/Users/ユーザ名/Desktop/test/test.xlsx")
wb = openpyxl.load_workbook(path)
sh = wb['Sheet1']  # 'Sheet1' という名前のシートを取得

for row in sh.iter_rows(min_row=2, max_row=5, min_col=1, max_col=1):
    for cell in row:
        str_temp = cell.value
        print(str_temp)

その2
以下のようなファイルからディクショナリを生成する

from pathlib import Path
import openpyxl
import pandas as pd
# Path オブジェクトを使用してファイルパスを指定
path = Path("C:/Users/ユーザ名/Desktop/test/dict.xlsx")
sheet_name = "Sheet1"
excel_data = pd.read_excel(path,sheet_name=sheet_name)
# Excelのデータをディクショナリに変換
# キーとして 'Key' 列を、バリューとして 'Value' 列を使用
data_dict = dict(zip(excel_data['Key'], excel_data['Value']))
print("生成されたディクショナリ:", data_dict)

出力結果

その3

import pathlib
import openpyxl

path = r"C:\Users\ユーザ名\Desktop\test\test.xlsx"  # ファイルパスを生文字列として指定
wb = openpyxl.load_workbook(path)
for sh in wb:  # コロンを追加
    for dt_row in range(2, 6):
        str_temp = sh.cell(row=dt_row, column=1).value  
        print(str_temp)