为什么我的 Python 程序的可执行版本不能正确执行 os.listdir 和 os.path.isdir? OS 是 Windows 10

Why does the executable version of my Python program doesn't execute os.listdir and os.path.isdir correctly? OS is Windows 10

我有这个程序可以打印一个字典,其中 文件夹名称 作为键, 文件名 作为给定 [=17= 的值]:

import os
if os.name == 'nt': # Let's add some colors for the lulz
    from ctypes import windll
    k = windll.kernel32
    k.SetConsoleMode(k.GetStdHandle(-11), 7)

# Main method
the_dictionary_list = {}
print('\u001b[43mHi Sailor! I am "SAND-wich", a simple program built by @NoahVerner3[0m')
print('\n')
time.sleep(2)
def check_path(infile):
    return os.path.exists(infile)    
        
first_entry = input('Tell me the path in which your folders with images are located:')

while True:
    
    if check_path(first_entry) == False:
        print('\n')
        print('This PATH is invalid!')
        first_entry = input('Tell me the RIGHT PATH in which your folders with ONLY images are located:')
        
    elif check_path(first_entry) == True:
        print('\n')
        final_output = first_entry
        break

print('This PATH has the following folders with the following files:')
print('\n')
for name in os.listdir(first_entry):
    if os.path.isdir(name):
        path = os.path.basename(name)
        print(f'\u001b[45m{path}3[0m')
        list_of_file_contents = os.listdir(path)
        print(f'3[46m{list_of_file_contents}')
        the_dictionary_list[path] = list_of_file_contents
print('\n')
print('\u001b[43mthe_dictionary_list:3[0m')
print(the_dictionary_list)
print('\n')

.py 文件中,上面的代码按预期工作,没有任何错误。

cmd 上使用以下语句将此程序导出为单个可执行文件后:

pyinstaller --onefile --icon=./SAND-wich_icon.ico SAND-wich.py

我得到这些文件夹:

dist 文件夹中包含我想要的 .exe 文件。

所以我 运行 SAND-wich.exe 作为 Admin 必须先停用我的 AVG Antivirus (因为它不让那个程序 运行 也不正确)

那个可执行文件确实识别出path我传递的输入确实是一个路径

但是,它没有return具有预期值的所需字典它return是一个空字典:

是什么导致了这个问题?假设我在两种情况下传递的 path 是相同的,并且只包含仅包含 png 图像的文件夹,而 os 其中可执行文件将 运行 是 Windows 10.

我想通了,.py 代码实际上有些愚蠢

for name in os.listdir(first_entry):
    backslash = "\"
    if os.path.isdir(first_entry+backslash+name):
        path = os.path.basename(name)
        print(f'\u001b[45m{path}3[0m')
        list_of_file_contents = os.listdir(first_entry+backslash+path)
        print(f'3[46m{list_of_file_contents}')
        the_dictionary_list[path] = list_of_file_contents
print('\n')
print('\u001b[43mthe_dictionary_list:3[0m')
print(the_dictionary_list)
print('\n')

Diffchecker 上进行的比较,旧版本与新版本。