os.stat FileNotFoundError [Ошибка Win 3], если файл существует. (Python) - PullRequest
1 голос
/ 19 июня 2020

Я пытаюсь написать фрагмент кода, чтобы сообщить мне, насколько велик каталог, чтобы я мог видеть, хочу ли я его удалить. Я столкнулся с ошибкой в ​​заголовке, когда тестировал этот фрагмент кода.

import os

class File_Manager:
    def __init__(self):
        pass
    def find_size(self, path):
        assert type(path) == str, "Path should be a string"
        size = 0
        if os.path.isdir(path):
            for root, dirs, files in os.walk(path, topdown=False):
                for file in files:
                    size += os.stat(f"{root}\{file}", follow_symlinks=False).st_size
            size = self.convert_size(size)


        elif os.path.isfile(path):
            stats = os.stat(path)
            size = self.convert_size(stats.st_size)

        return size
    def convert_size(self, num):
        size_ext = {0:"B", 1:"KB", 2:"MB", 3:"GB", 4:"TB"}
        ext_num = 0
        while num > 1024:
            num /= 1024
            ext_num += 1
        return f"{int(num)}{size_ext[ext_num]}"

manager = File_Manager()
a = manager.find_size("C:\\")
print(a)

Ожидаемый результат:

[somesize] GB

Фактический результат:

FileNotFoundError: [WinError 3] The system cannot find the path specified: 'C:\\Windows\\servicing\\LCU\\Package_for_RollupFix~31bf3856ad364e35~amd64~~18362.836.1.6\\amd64_microsoft-windows-a..g-whatsnew.appxmain_31bf3856ad364e35_10.0.18362.752_none_cf994d2ae256d6d5\\f\\new360videossquare44x44logo.targetsize-16_altform-unplated_contrast-black.png'

Когда я следую по пути в проводнике файлов, он там. Когда я открываю вкладку свойств, я получаю следующее расположение: C: \ Windows \ servicing \ LCU \ PACKAG ~ 1.6 \ AM2317 ~ 1.752 \ f " и это как файл: new360videossquare44x44lo go .targetsize-16_altform-unplated_contrast-black.png который при соединении не выглядит как путь в ошибке. os.stat работает с путем в ошибке до тех пор, пока я не добавлю имя файла

Пример. os.stat('C:\\Windows\\servicing\\LCU\\Package_for_RollupFix~31bf3856ad364e35~amd64~~18362.836.1.6\\amd64_microsoft-windows-a..g-whatsnew.appxmain_31bf3856ad364e35_10.0.18362.752_none_cf994d2ae256d6d5\\f') работает. os.expanduser мне тоже не помогает. Просто добавляю это туда, потому что я что-то читал о необходимости расширения каталога пользователя. Также файл на диске равен 0, я читал, это означает, что это было резидентный файл. Я не знаю, имеет ли это какое-либо значение, но это то, что я обнаружил, пытаясь решить эту проблему. Мне было интересно, может ли кто-нибудь сказать мне, почему я получаю эту ошибку, если файл существует, и можете ли вы мне помочь устраните эту ошибку.

...