为什么我的 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 上进行的比较,旧版本与新版本。
我有这个程序可以打印一个字典,其中 文件夹名称 作为键, 文件名 作为给定 [=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 上进行的比较,旧版本与新版本。