shell - 当脚本是可执行文件时 os.listdir 的问题
问题描述
我创建了一个脚本,它从一个文件夹中获取一个文件并在另一个文件夹中生成另一个文件。这是一个将一种格式转换为另一种格式的项目,供没有强大信息学背景的人使用,因此我创建了一个包含脚本的文件夹以及输入文件夹和输出文件夹。用户只需要将输入文件放在输入文件夹中并从输出文件夹中获取结果。
如果我在使用可视代码运行时运行此 python 脚本以及如果我使用终端运行脚本(python CSVtoVCFv3.py),则该脚本工作正常
但是当我使用 pyinstaller 将我的脚本转换为可执行文件时,我发现了下一个错误。
File "CSVtoVCFv3.py", line 99, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/Users/manoldominguez/input/'
[99327] Failed to execute script CSVtoVCFv3
第 99 行使用的代码是:
97 actual_path = os.getcwd()
98 folder_input = '/input/'
99 input_file_name = os.listdir(actual_path+folder_input)
100 input_file_name= ''.join(input_file_name)
101 CSV_input = actual_path+folder_input+input_file_name
我也试过这个:
actual_path = (os.path.dirname(os.path.realpath('CSVtoVCFv3.py')))
因此,据我所知,问题的结论是:
在这些行中,如果我运行我的脚本,我会得到这个
'/Users/manoldominguez/Desktop/CSVtoVCF/input/'
如果我的脚本与我的可执行文件一起运行,我会得到这个
'/Users/manoldominguez/input/'
解决方案
os.getcwd()
给出Current Working Directory
- 它表示执行脚本的文件夹,但不一定是保存脚本的文件夹。通过这种方式,您可以在不同的文件夹中运行代码,并且它可以与不同文件夹中的文件一起使用——而且它很有用。
但是,如果您需要在有脚本的文件夹中使用文件,那么您可以使用
SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__))
或者
import sys
SCRIPT_PATH = os.path.dirname(os.path.realpath(sys.argv[0]))
不与'CSVtoVCFv3.py'
然后你就可以加入了
SCRIPT_PATH = os.path.dirname(os.path.realpath(sys.argv[0]))
folder_input = '/input/'
full_folder_input = os.path.join(SCRIPT_PATH, folder_input)
all_filenames = os.listdir(full_folder_input)
for input_file_name in all_filenames:
#CSV_input = os.path.join(full_folder_input, input_file_name)
CSV_input = os.path.join(SCRIPT_PATH, folder_input, input_file_name)
我只是不喜欢你
input_file_name = os.listdir(actual_path+folder_input)
input_file_name= ''.join(input_file_name)
因为listdir()
可能会提供更多文件,然后您join
可能会创建不正确的路径。更好地获取input_file_name[0]
单个文件或使用for
-loop 处理文件夹中的所有文件。
顺便说一句:也许您应该使用sys.argv
获取路径作为参数,然后每个人都可以决定将文件放在哪里。
推荐阅读
- python - 使用带有自定义标签的饼图创建甜甜圈
- java - FusionAuth授权
- raspberry-pi - 电子应用程序来管理设备的 wifi 连接
- python-3.x - 如何转换测试数据以选择与训练数据集相同的特征
- python - Logstash编解码器和字符编码问题
- konvajs - Konvajs:创建一个对其中一个孩子有一些约束的可拖动区域
- tensorflow - 您是否需要在 tensorflow 2 keras 中为自定义激活函数定义导数函数?
- api - 通过 API 添加时,Dspace 中比特流的“名称”为空?
- python - 同一图表上的多个图 - Matplotlib
- c# - 找不到此本地主机页面。未找到网址“...”的网页