『できる 仕事がはかどるPython自動処理 全部入り。』のChapter 5「ファイルの操作と圧縮・展開」に、zipファイルの中身を確認するスクリプトが紹介されています。
まったく同じロジックで、xlsxファイルに含まれるファイル名も確認できるはずですから、試してみました。
ZipFile.inforlist()からファイル名を取得するスクリプト
以下のスクリプトを実行すれば、Cドライブtempフォルダーのfoo.xlsxファイルに含まれるファイルの名前がprintされます。
for info in zf.infolist():
print(info.filename)
『できる 仕事がはかどるPython自動処理 全部入り。』のp.105に掲載されているスクリプトと、実質同じです。
zipfile.ZipFile()の引数で指定するファイルをフルパスにして、モードを指定する第2引数を省略しています。
スクリプトの実行結果
ワークシート「Sheet1」だけが存在する、新規に作成したブックの場合、以下のようなファイル名が出力されます。[Content_Types].xml
_rels/.rels
xl/workbook.xml
xl/_rels/workbook.xml.rels
xl/worksheets/sheet1.xml
xl/theme/theme1.xml
xl/styles.xml
docProps/core.xml
docProps/app.xml
ZipFile.namelist()を使ってファイル名を取得するスクリプト
ネットを検索してみても、なぜか上記のZipFile.infolist()を使ったコードをよく見かけるように感じますが、ファイル名のリストを作成するZipFile.namelist()を使った、以下のようなスクリプトでも、Cドライブtempフォルダーのfoo.xlsxファイルに含まれるファイルの名前をprintできます。
for name in zf.namelist():
print(name)
先述のスクリプトではZipFile.infolist()メソッドで、Zipinfoオブジェクトを取得しているのに対し、
for info in zf.infolist():
こちらではZipFile.namelist()メソッドで直接ファイル名のリストを取得しています。
for name in zf.namelist():
Zipinforオブジェクトを取得した場合にはZipinfo.filenameでファイル名を取得する必要があるのに対し、
for info in zf.infolist():
print(info.filename)
ファイル名のリストを取得した場合は、リストから要素を取得する一般的な処理だけで、ファイル名を取得できます。
for name in zf.namelist():
print(name)
最終更新日時:2024-01-16 16:39