我有一个像这样的项目结构
test/foo.py
test/bar (directory with 10 files)
src/
README.MD
从foo.py
(位于test
dir中),我希望迭代bar
目录中的10个文件(也在test
目录中)。我试着这样做
import os
for path in os.listdir('bar'):
etc
但它说,"没有这样的文件或目录:bar"
然后我试着这样做
basepath = '/Users/me/pythonprojects/project_x/bar'
for path in os.listdir(basepath):
etc
但是,当我计算它迭代的文件数时,它是0(不是预期的10)。
然后我试着这样做
for path in '/Users/me/pythonprojects/project_x/test/bar':
etc
然而,它会迭代我系统中的每个文件(数百个,而不仅仅是10个条形码)。
虽然这不是我想做的,但是如果从命令行我将.
的参数传递给sys.argv [1],然后尝试像这样迭代bar dir
for path in sys.argv[1]
它遍历bar dir中的十个文件。
那么,foo.py
是否有办法迭代bar
中的文件(只有bar
dir中的文件)
更新,当我在print(os.getcwd(), "foo.py cwd")
中foo.py
(然后在根目录中从run_test.py
调用测试运行器)时,它会显示
/Users/me/pythonprojects/project_x
即。 os.getcwd()
无法识别foo.py
位于项目的test
目录中,这可能是因为测试是从root运行的?
答案 0 :(得分:1)
使用os.path
中的函数执行此操作(仅适用于脚本,而不是REPL):
import os
# retrieve path to directory with script
script_dir = os.path.dirname(os.path.realpath(__file__))
bar_dir = os.path.join(script_dir, 'bar')
for f in os.listdir(bar_dir):
print(f)