Python os.makedirs重新创建路径

时间:2012-05-10 18:08:37

标签: python path tree append mkdirs

我想浏览现有路径和文件名的文本文件中的每一行,将字符串分为驱动器,路径和文件名。那么我想要做的是将文件及其路径复制到新位置 - 不同的驱动器或附加到现有的文件树(即,如果S:\ A \ B \ C \ D \ E \ F.shp是原始文件。我希望将它附加到新位置,如C:\ users \ visc \ A \ B \ C \ D \ E \ F.shp

由于编程技巧不佳,我继续收到错误:

File "C:\Users\visc\a\b.py", line 28, in <module>
     (destination) = os.makedirs( pathname, 0755 );

这是我的代码:

import os,sys,shutil

## Open the file with read only permit
f = open('C:/Users/visc/a/b/c.txt')

destination = ('C:/Users/visc')
# read line by line
for line in f:

     line = line.replace("\\\\", "\\")
     #split the drive and path using os.path.splitdrive
     (drive, pathname) = os.path.splitdrive(line)
     #split the path and fliename using os.path.split
     (pathname, filename) = os.path.split(pathname)
#print the stripped line
     print line.strip()
#print the drive, path, and filename info
     print('Drive is %s Path is %s and file is %s' % (drive, pathname, filename))

     (destination) = os.makedirs( pathname, 0755 );
     print "Path is Created"

谢谢

3 个答案:

答案 0 :(得分:5)

您需要做的是在调用makedirs()之前检查文件夹是否存在,或者处理文件夹已存在时发生的异常。在Python中,处理异常更常规,因此请更改makedirs()行:

try:
    (destination) = os.makedirs( pathname, 0755 )
except OSError:
    print "Skipping creation of %s because it exists already."%pathname

在尝试创建文件夹之前检查文件夹的策略称为“在你跳跃之前看”或LBYL;处理预期错误的策略是“更容易请求宽恕而不是许可”或EAFP。 EAFP的优势在于它能够正确处理检查和makedirs()调用之间的另一个进程创建文件夹的情况。

答案 1 :(得分:3)

我想你想要像

这样的东西
os.makedirs(os.path.join(destination, pathname), 0755 )

如果要将pathname给出的文件路径与destination给出的新目标相关联。您的代码当前尝试在与以前相同的位置创建文件(至少它看起来像这样 - 不能肯定地说,因为我不知道您正在阅读的文件中有什么,以及您当前的目录是什么)。

如果您将调用结果分配给os.makedirs() destination(括号与该行中的分号一样无效),则有效地将destination设置为None因为os.makedirs()实际上没有返回任何内容。而你并没有用它来构建你的新路径。

答案 2 :(得分:2)

Python 3.2添加了exists_ok可选参数:

os.makedirs(name,mode = 0o777,exist_ok = False)

如果你有幸被允许使用Python 3,这可能是一个更好(更安全)的选择。