【问题标题】:Unsure how .join() functions with two parameters不确定 .join() 如何使用两个参数起作用
【发布时间】:2025-12-23 12:45:06
【问题描述】:

在以下方法中,我不确定 .join(data_directory, d).join(ROOT_PATH, "TrafficSigns/Training") 会产生什么结果。具体来说,我不知道 .join() 如何处理这两个参数。

def load_data(data_directory):
    directories = [d for d in os.listdir(data_directory) 
                   if os.path.isdir(os.path.join(data_directory, d))]
    labels = []
    images = []
    for d in directories:
        label_directory = os.path.join(data_directory, d)
        file_names = [os.path.join(label_directory, f) 
                      for f in os.listdir(label_directory) 
                      if f.endswith(".ppm")]
        for f in file_names:
            images.append(skimage.data.imread(f))
            labels.append(int(d))
    return images, labels

ROOT_PATH = "/your/root/path"
train_data_directory = os.path.join(ROOT_PATH, "TrafficSigns/Training")
test_data_directory = os.path.join(ROOT_PATH, "TrafficSigns/Testing")

images, labels = load_data(train_data_directory)

快速说明,我正在从 TrafficSign 文件夹(包含两个文件夹,Training 和 Testing)中加载图像。

【问题讨论】:

  • 请记住这是os.path.join,而不是str.joinos.path.join 采用一个或多个路径并使用 os.sep 将它们连接在一起
  • 但是为什么在参数中同时包含 data_directoryd 呢?为什么不只将 d 作为参数?拥有它们有什么意义?它们如何相互作用?
  • data_directory 是某个目录,比如/path/to/listdir(data_directory) 是该目录中所有内容(文件、其他目录等)的可迭代对象。所以path.join(data_directory, d) 只是data_directory 的完整路径。假设有一些文件file。那么d'file'data_directory'/path/to/'path.join(data_directory, file)/path/to/file

标签: python python-3.x join


【解决方案1】:

os.path.join()

这会将路径安全地连接在一起作为一个字符串。它使用os.sep 来确保操作系统平台使用了正确的路径分隔符。它可以更正多余的分隔符。

mypath = os.path.join("/some/path/", "/directory")
print(mypath) # "/some/path/directory"

【讨论】: