私は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
パスとファイル名のみが必要な場合、このエラーは表示されません。
最初に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
を使用することは、一般的に良い方法ですfile
は標準名前空間のクラスの名前であり、おそらく上書きしないでください:)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))