web-dev-qa-db-ja.com

パス文字列をドライブ、パス、ファイル名の部分に分割する

私はpythonとコーディング一般に不慣れです。各行にパス名が含まれているテキストファイルから読み込もうとしています。テキストファイルを行ごとに読み、ドライブ、パス、ファイル名へのラインストリング。

これまでのところ私のコードです:

import os,sys, arcpy

## Open the file with read only permit
f = open('C:/Users/visc/scratch/scratch_child/test.txt')

for line in f:
    (drive,path,file) = os.path.split(line)

    print line.strip()
    #arcpy.AddMessage (line.strip())
    print('Drive is %s Path is %s and file is %s' % (drive, path, file))

次のエラーが発生します。

File "C:/Users/visc/scratch/simple.py", line 14, in <module>
    (drive,path,file) = os.path.split(line)
ValueError: need more than 2 values to unpack

パスとファイル名のみが必要な場合、このエラーは表示されません。

18
Visceral

最初にos.path.splitdriveを使用する必要があります:

with open('C:/Users/visc/scratch/scratch_child/test.txt') as f:
    for line in f:
        drive, path = os.path.splitdrive(line)
        path, filename = os.path.split(path)
        print('Drive is %s Path is %s and file is %s' % (drive, path, filename))

ノート:

  • withステートメントは、ファイルがブロックの最後で確実に閉じられるようにします(ガベージコレクターがファイルを食べると、ファイルも閉じられますが、withを使用することは、一般的に良い方法です
  • 大括弧は必要ありません-os.path.splitdrive(path)はタプルを返し、これは自動的に解凍されます
  • fileは標準名前空間のクラスの名前であり、おそらく上書きしないでください:)
31
Manuel Ebert

Os.path.splitdrive()を使用してドライブを取得し、残りをpath.split()で取得できます。

## Open the file with read only permit
f = open('C:/Users/visc/scratch/scratch_child/test.txt')

for line in f:
    (drive, path) = os.path.splitdrive(line)
    (path, file)  = os.path.split(path)

    print line.strip()
    print('Drive is %s Path is %s and file is %s' % (drive, path, file))
6
jordanm