3

既存のパスとファイル名のテキストファイルのすべての行を調べ、文字列をドライブ、パス、およびファイル名に分割したいと思います。次に、パスを含むファイルを新しい場所にコピーします。別のドライブにするか、既存のファイルツリーに追加します(つまり、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 );

これが私のコードです:

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"

ありがとうございました

4

3 に答える 3

5

必要なことは、呼び出す前にフォルダーの存在を確認makedirs()するか、フォルダーが既に存在する場合に発生する例外を処理することです。Python では、例外を処理するのがもう少し一般的であるため、次のmakedirs()行を変更します。

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

フォルダーを作成する前にチェックする戦略は、「Look Before You Leap」または LBYL として知られています。予想されるエラーを処理する戦略は、「許可よりも許しを求める方が簡単」または EAFP です。makedirs()EAFP の利点は、フォルダーがチェックと呼び出しの間に別のプロセスによって作成された場合を正しく処理することです。

于 2012-05-10T18:44:10.753 に答える
3

あなたは次のようなものが欲しいと思います

os.makedirs(os.path.join(destination, pathname), 0755 )

pathnameで指定されたファイル パスを で指定された新しい宛先に接続する場合destination。あなたのコードは現在、以前と同じ場所にファイルを作成しようとしています (少なくともこのように見えます - あなたが読んでいるファイルの内容と現在のディレクトリが何であるかがわからないため、確かなことは言えません)。

呼び出しの結果を to に代入するos.makedirs()destination(かっこはその行のセミコロンと同じくらい役に立たない)、実際には何も返さないのでtodestinationを効果的に設定します。そして、それを使用して新しいパスを構築していません。Noneos.makedirs()

于 2012-05-10T18:12:48.920 に答える