所以我正在编写一些将部署在树莓派上的代码。由于 raspberry pi 的计算限制,以及它为此特定用途(图像捕获和处理)所采取的一系列步骤,我认为最好尽可能使用列表理解来代替 for 循环。如果可行,我设法创建了一个创建文件数组(名称+路径)的语句:
self.dark_file_names=np.array([(os.path.join(self.dark_frames_path, line.strip("\n")) for root, dirs, files in os.walk(self.dark_frames_path) for line in files if line.endswith(".npy\n"))])
但是,我在 ipython 中尝试了一个变体:
dark_file_names=np.array([(os.path.join(dark_frames_path, line.strip("\n")) for root, dirs, files in os.walk(dark_frames_path) for line in files if line.endswith(". py\n"))])
这是输出:
array([<generator object <genexpr> at 0x7f14d4412888>], dtype=object)
dark_frames_path 是一个包含大量 python 文件的本地目录
不幸的是,这不是我所希望的。我还尝试了一个具有类似结果的普通列表。为什么它将我的语句解释为生成器表达式而不是列表理解?
当我在 ipython 中使用这些命令通过 ssh 执行此操作时,我也有此工作:
stdin, stdout, stderr= ssh.exec_command('ls')
l=[line.strip('\n') for line in stdout if line.strip('\n').endswith(".py")]
ssh 是一个 paramiko.SSHClient() 实例。