os.makedirs()和os.path.join()的区别
时间: 2024-08-13 13:02:42 浏览: 52
`os.makedirs()` 和 `os.path.join()` 是 Python 中两个不同的函数,它们各自有特定的作用。
`os.makedirs()` 函数用于创建多级目录结构。如果指定的路径不存在,则会递归地创建所有父目录直到达到给定的路径。例如:
```python
import os
# 创建名为 "my_directory/subdirectory" 的目录树,如果不存在则创建
os.makedirs('my_directory/subdirectory')
```
而 `os.path.join()` 用于拼接路径,它能够处理不同操作系统(如 Windows 和 Unix)之间的路径分隔符差异,确保生成的是平台无关的路径。它不会创建目录,仅仅是在给定的路径片段之间添加正确的路径分隔符。例如:
```python
from os import path
# 拼接路径,假设当前工作目录是 "/home/user"
full_path = os.path.join(os.getcwd(), 'my_directory', 'subdirectory')
print(full_path) # 输出:/home/user/my_directory/subdirectory
```
总结来说:
- `os.makedirs()` 用于创建路径,包括其上级目录。
- `os.path.join()` 用于构建完整的文件或目录路径,但不直接创建。
相关问题
将下面代码简洁化:def split_dataset(img_path, target_folder_path, output_path): filename = [] total_imgs = os.listdir(img_path) #for root, dirs, files in os.walk(img_path): for img in total_imgs: filename.append(img) np.random.shuffle(filename) train = filename[:int(len(filename) * 0.9)] test = filename[int(len(filename) * 0.9):] out_images = os.path.join(output_path, 'imgs') if not os.path.exists(out_images): os.makedirs(out_images) out_images_train = os.path.join(out_images, 'training') if not os.path.exists(out_images_train): os.makedirs(out_images_train) out_images_test = os.path.join(out_images, 'test') if not os.path.exists(out_images_test): os.makedirs(out_images_test) out_annotations = os.path.join(output_path, 'annotations') if not os.path.exists(out_annotations): os.makedirs(out_annotations) out_annotations_train = os.path.join(out_annotations, 'training') if not os.path.exists(out_annotations_train): os.makedirs(out_annotations_train) out_annotations_test = os.path.join(out_annotations, 'test') if not os.path.exists(out_annotations_test): os.makedirs(out_annotations_test) for i in train: print(os.path.join(img_path, i)) print(os.path.join(out_images_train, i)) shutil.copyfile(os.path.join(img_path, i), os.path.join(out_images_train, i)) annotations_name = "gt_" + i[:-3] + 'txt' shutil.copyfile(os.path.join(target_folder_path, annotations_name), os.path.join(out_annotations_train, annotations_name)) for i in test: shutil.copyfile(os.path.join(img_path, i), os.path.join(out_images_test, i)) annotations_name = "gt_" + i[:-3] + 'txt' shutil.copyfile(os.path.join(target_folder_path, annotations_name), os.path.join(out_annotations_test, annotations_name))
def split_dataset(img_path, target_folder_path, output_path):
filename = os.listdir(img_path)
np.random.shuffle(filename)
train = filename[:int(len(filename) * 0.9)]
test = filename[int(len(filename) * 0.9):]
out_images = os.path.join(output_path, 'imgs')
os.makedirs(out_images, exist_ok=True)
out_images_train = os.path.join(out_images, 'training')
os.makedirs(out_images_train, exist_ok=True)
out_images_test = os.path.join(out_images, 'test')
os.makedirs(out_images_test, exist_ok=True)
out_annotations = os.path.join(output_path, 'annotations')
os.makedirs(out_annotations, exist_ok=True)
out_annotations_train = os.path.join(out_annotations, 'training')
os.makedirs(out_annotations_train, exist_ok=True)
out_annotations_test = os.path.join(out_annotations, 'test')
os.makedirs(out_annotations_test, exist_ok=True)
for i in train:
img_src = os.path.join(img_path, i)
img_dst = os.path.join(out_images_train, i)
shutil.copyfile(img_src, img_dst)
annotations_name = "gt_" + i[:-3] + 'txt'
annotations_src = os.path.join(target_folder_path, annotations_name)
annotations_dst = os.path.join(out_annotations_train, annotations_name)
shutil.copyfile(annotations_src, annotations_dst)
for i in test:
img_src = os.path.join(img_path, i)
img_dst = os.path.join(out_images_test, i)
shutil.copyfile(img_src, img_dst)
annotations_name = "gt_" + i[:-3] + 'txt'
annotations_src = os.path.join(target_folder_path, annotations_name)
annotations_dst = os.path.join(out_annotations_test, annotations_name)
shutil.copyfile(annotations_src, annotations_dst)
os.path.join与os.makedirs()的区别
`os.path.join()` 和 `os.makedirs()` 是两个不同的功能,用于处理文件和目录操作。
`os.path.join()` 函数的作用是组合路径片段,它能够正确地处理不同操作系统(如Windows、Linux)之间的路径分隔符。这个函数接受两个参数,一个是当前工作目录或父路径,另一个是子路径名。例如:
```python
from os import path
path.join("/home/user", "Documents") # 结果可能是 "/home/user/Documents" 或 "C:\Users\user\Documents"
```
它返回的是一个完整的、适合当前平台的路径字符串。
另一方面,`os.makedirs()` 函数用于递归地创建目录树。如果指定的路径不存在,它会尝试创建整个路径,包括中间的层次结构。如果某个路径的一部分已经存在,但不是完整路径,它仍然会继续创建缺失的部分。例如:
```python
import os
os.makedirs("/path/to/directory/that/may/not/exist", exist_ok=True)
```
这里,`exist_ok=True` 表示如果目标路径已存在,不会引发错误,而是忽略它。
总结来说,`os.path.join()` 主要是用来构建路径,而 `os.makedirs()` 则是用于创建目录。前者不涉及现有目录的修改,后者则可能改变文件系统结构。
阅读全文