Разделение строк пути на части диска, пути и имени файла

Я новичок в 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

Я не получаю эту ошибку, когда мне нужен только путь и имя файла.

Ответ 1

Сначала вам нужно использовать 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 - это имя класса в стандартном пространстве имен, и вы, вероятно, не должны перезаписывать его:)

Ответ 2

Вы можете использовать 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))