在GitHub仓库的Jupyter Notebook中遍历rasters_as_int文件夹内TIFF文件失败的问题求助
解决MyBinder中Jupyter Notebook遍历子文件夹TIFF文件的问题
看起来你在把TIFF文件移到rasters_as_int子文件夹后,遇到了glob路径匹配的问题——这在跨环境(比如MyBinder的远程容器)里很常见,主要是当前工作目录不明确或者硬编码路径分隔符导致的。下面给你几个可靠的解决办法:
1. 先确认当前工作目录(关键第一步)
在Notebook里先运行这段代码,明确你当前代码的执行路径:
import os print(os.getcwd())
比如在MyBinder中,仓库通常会被克隆到类似/home/jovyan/你的仓库名的路径下,如果你直接运行Notebook,当前工作目录应该是仓库根目录,但偶尔会有例外,确认后才能准确构建路径。
2. 使用跨平台的路径构建方式(推荐)
避免手动写/或\,用Python的os.path.join来拼接路径,这样不管是Windows还是Linux(MyBinder用Linux容器)都能兼容:
import glob import os # 构建子文件夹的完整路径 folder_path = os.path.join(os.getcwd(), 'rasters_as_int') # 遍历该文件夹下所有含TIFF的文件 rasters_list = glob.glob(os.path.join(folder_path, '*TIFF*')) print(rasters_list)
3. 更现代的pathlib方式(Python 3.4+)
如果你用的是较新的Python版本,pathlib模块更直观,还能自动处理路径分隔符:
from pathlib import Path # 获取当前目录下的rasters_as_int文件夹对象 folder = Path.cwd() / 'rasters_as_int' # 遍历所有带TIFF的文件,返回Path对象列表 rasters_list = list(folder.glob('*TIFF*')) # 如果需要字符串格式的路径,做个转换即可 rasters_list = [str(file) for file in rasters_list] print(rasters_list)
4. 排查MyBinder中的路径异常
如果上面的方法还是不行,可能是MyBinder的工作目录和你预期的仓库根目录不一致。可以用os.path.abspath直接获取文件夹的绝对路径:
import glob import os # 获取rasters_as_int文件夹的绝对路径 abs_folder_path = os.path.abspath('rasters_as_int') rasters_list = glob.glob(os.path.join(abs_folder_path, '*TIFF*')) print(rasters_list)
为什么你之前的写法可能失败?
- MyBinder运行的是Linux容器,Windows风格的
\路径分隔符完全无效; - 开头的
/表示系统根目录,不是你的仓库根目录,所以/rasters_as_int/*会去系统根目录查找,自然找不到目标文件; - 有时候Notebook的工作目录可能和你预期的不一样(比如从子文件夹打开Notebook),所以用
os.getcwd()确认路径是关键。
内容的提问来源于stack exchange,提问作者user88484
相关产品推荐
相关产品推荐

