質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

フォルダサイズの取得(社内ネットワーク)

ken248
ken248

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

5閲覧

投稿2021/02/09 06:32

社内ネットワーク内の各フォルダサイズを取得したいと思っています。
社内ネットワークで一部のフォルダには閲覧制限があるためそのフォルダは算出不能としたいです。

def get_size(fld1,wb1,ws1,sheet):内で
基本はtryで読み込んで、閲覧制限がかかっているもののみexceptで回したいのですが、
**現状は全てexceptに行き、全てのフォルダが0で出力されています。
(エラーは出てません)

try...except...を付けずに、PC上のファイルで実行すると実行できます。

どうぞよろしくお願いいたします。

python

import pathlib import os.path import sys import csv import glob import os import tkinter as tk import datetime import subprocess from tkinter import messagebox as mb from tkinter import filedialog import openpyxl from pandas import Series,DataFrame import pandas as pd from hurry.filesize import size, si def make_file(): fld1 = e1.get() result_file = fld1 + "/フォルダ容量0208.xlsx" #Excelファイルの作成 wb1 = openpyxl.Workbook() ws1 = wb1.active sheet = wb1.active sheet.title = 'fld_check' pass_set(fld1,wb1,ws1,sheet) def pass_set(fld1,wb1,ws1,sheet): #フォルダ・ファイルの入力欄が空ならアラート if fld1 == '': mb.showwarning('警告', 'ルートフォルダを指定してください!') else: get_size(fld1,wb1,ws1,sheet) **def get_size(fld1,wb1,ws1,sheet):** total = 0 try: for entry in os.scandir(fld1): if entry.is_file(): total += entry.stat().st_size elif entry.is_dir(): total += get_size(entry.path) if total > 1000: total = size(total) return total except: total = "算出不能" file_check(fld1,wb1,ws1,sheet,total) def file_check(fld1,wb1,ws1,sheet,total): filedata = [] for dirpath, dirname, filename in os.walk(fld1): for f in dirname: fd = {} fd['fullname'] = os.path.join(dirpath,f) filedata.append(fd) # パスを分解し、深さを計算する。 max_depth=0 for f in filedata: splited = f['fullname'].split('\\') f['splited'] = splited path_depth = len(splited) f['depth'] = path_depth if max_depth < path_depth: max_depth = path_depth # 最も深いパスに合わせてリストを拡張する。 #for f in filedata: # while len(f['splited']) <= max_depth: # f['splited'].append('') #print("0") # CSV出力用のリストを作成する。 outdata=[] for f in filedata: t = f['splited'] #print(t) print(total) #print(t) t.append(total) outdata.append(t) #print(outdata) write_to_excel(fld1,wb1,ws1,sheet,total,outdata) def write_to_excel(fld1,wb1,ws1,sheet,total,outdata): ws1.cell(row=1, column=1, value="1階層目") ws1.cell(row=1, column=2, value="2階層目") ws1.cell(row=1, column=3, value="3階層目") ws1.cell(row=1, column=4, value="4階層目") ws1.cell(row=1, column=5, value="5階層目") ws1.cell(row=1, column=6, value="サイズ") start_row=2 start_col=1 for y, row in enumerate(outdata): for x, cell in enumerate(row): sheet.cell(row=start_row + y, column=start_col + x, value=outdata[y][x]) wb1.save('フォルダ容量0208.xlsx') mb.showinfo('完了', 'ファイルの作成が完了しました。') #フォルダを開く処理 def open_folder(): orgin_path = e1.get() if orgin_path is None: folder_path = 'C:' else: folder_path = orgin_path folder_path = tk.filedialog.askdirectory(initialdir = folder_path) e1.insert(tk.END,folder_path) ### GUI部品の設定 ### #windowの準備 win = tk.Tk() win.minsize(250,200) win.title('フォルダ構成内容') #ラベルの作成 lb1 = tk.Label(win,text='ルートパス') lb1.place(x=5,y=5) #入力boxの作成 e1 = tk.Entry(win,width=20) e1.place(x=60,y=5) #フォルダを開くボタンの作成(上記で定義したopen_folderと紐づけ) btn_opn1 = tk.Button(win,text='...',command=lambda: open_folder()) btn_opn1.place(x=190,y=5) #リスト取得ボタンの作成(上記で定義したfile_write処理と紐づけ) btn = tk.Button(win,text='実行',command=make_file) btn.place(x=140,y=30) win.mainloop()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

t_obara
t_obara

2021/02/09 07:30

pathlib\.globを使ってみてはいかがでしょう、取り回しが簡単です。さらに例外の理由を確認すると原因究明しやすくなるかと思います。
ppaul
ppaul

2021/02/09 08:51

全部は見ていませんが、def get_size のところで、exceptが起きたときに値を返していないのはバグではないでしょうか。 また、total \+= get_size\(entry\.path\)で引数が1個なのもバグではないでしょうか。
ken248
ken248

2021/02/09 08:54

t_obataさん フォルダの取得のところで使うということですよね?
ken248
ken248

2021/02/09 09:00

ppaulさん 後半のご意見は色々試している中で生じていました。 調べてもなかなかわからなかったのですが、 total \+= get_size\(entry\.path\)  ここの引数は4個必要ということですかね? 申し訳ございませんが、プログラミングの知識不足でして… ①引数4個は何を入れるべきなのでしょうか?(wb1,ws1,sheetに対応するものがわからないです。) もしくは ②defのところの引数を減らす必要があるのでしょうか?
ken248
ken248

2021/02/09 09:00

お二方とも返信ありがとうございます。 大変ありがたいです
t_obara
t_obara

2021/02/09 23:33

ファイルサイズも取得できます

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。