解析目录作为参数的问题
Posted
技术标签:
【中文标题】解析目录作为参数的问题【英文标题】:Problems with parsing directory as argument 【发布时间】:2020-09-04 21:09:09 【问题描述】:我在 python 中有一个程序,它遍历目录中的所有文件,我将其作为参数给出。我还在我的 python 文件中设置了一个参数解析函数。当我尝试使用 bash 脚本和目录作为参数运行该 python 文件时,出现以下错误:
Traceback (most recent call last):
File "main.py", line 93, in <module>
args['inverse transformation path'], args['line'])
File "main.py", line 68, in main
transform_path, inverse_path, line)])
File "main.py", line 65, in main
for filename in os.listdir(image_directory):
NotADirectoryError: [Errno 20] Not a directory: 'test1/2020-03-11-11-45-37-576.jpg'
我正在运行 python 脚本:
python3 main.py -imd 'test1' -pp points.csv -rpp transformed_points.csv -tp transformation_matrix.csv
-itp inverse_transformation_matrix.csv -l 2
这就是我正在运行的函数。
def main(image_directory, points_path, real_points_path, transform_path, inverse_path, line):
data = []
index = 0
for filename in os.listdir(image_directory):
if filename.endswith(".jpg") or filename.endswith(".png"):
data.append([filename, analysis_main(os.path.join(image_directory, filename), points_path, real_points_path,
transform_path, inverse_path, line)])
index += 1
df = pandas.DataFrame(data)
df.to_csv("razdalje.csv", sep=',', header=False, index=False)
和解析
ap = argparse.ArgumentParser()
ap.add_argument("-imd", "--image directory", required=True,
help="directory with images")
ap.add_argument("-pp", "--points path", required=True,
help="path to the csv file with pixels used for declaring coordinate system")
ap.add_argument("-rpp", "--real points path", required=True,
help="path to the csv file with points on the ground used for declaring coordinate system")
ap.add_argument("-tp", "--transformation path", required=True,
help="path to the csv file with matrix used for transforming space")
ap.add_argument("-itp", "--inverse transformation path", required=True,
help="path to the csv file with inverse matrix used for transforming space")
ap.add_argument("-l", "--line", required=True,
help="declaring on which lane is the analysis being done, 1 -> left lane 2 -> right lane")
args = vars(ap.parse_args())
并使用
运行代码main(args['image directory'], args['points path'], args['real points path'], args['transformation path'],
args['inverse transformation path'], args['line'])
【问题讨论】:
您能分享一下您在其中进行解析和路径转换的代码吗? 这段代码仍然没有显示调用main()
的内容,因此没有显示作为image_directory
传递的内容。
有趣。如果我使用相同的代码,我得到的错误是预期的(因为test1
实际上不是我正在工作的目录,但它会在你的情况下)。这段代码与您的代码有何不同,以至于您收到与jpg
文件相关的错误而我没有? pyfiddle.io/fiddle/e79f5f4d-7188-44c8-87b6-4c85325c9a9d/?i=true
我看不出有什么不同...
这些我们看不到实现的方法(例如analysis_main
)是否又再次调用main
?您提供的堆栈跟踪看起来有 3 深,但我们目前看到的代码只有 2 深的堆栈跟踪。
【参考方案1】:
我们不知道您是如何浏览文件系统的,但列出的文件显然不是目录,而是图像。在检查之前添加这样的安全检查:
if os.path.isdir(image_directory):
for filename in os.listdir(image_directory):
我建议你 look into os.walk()
,因为它为你工作。
【讨论】:
问题是参数肯定是一个目录,但是由于某种原因而不是我给出的参数,image_directory中的第一项被当作目录的名称。以上是关于解析目录作为参数的问题的主要内容,如果未能解决你的问题,请参考以下文章