2012-05-08 7 views
14

Jestem nowym użytkownikiem Pythona i kodowania w ogóle. Próbuję odczytać z pliku tekstowego, który ma nazwy ścieżek w każdym wierszu. Chciałbym odczytać plik tekstowy wiersz po linii i podzielić ciągi linii na dysk, ścieżkę i nazwę pliku.Podział ciągów ścieżek na części dysku, ścieżki i nazwy pliku

Oto mój kod do tej pory:

pojawia się następujący błąd:

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 

Nie otrzymałeś ten błąd, gdy chcę tylko ścieżkę i nazwę pliku.

Odpowiedz

23

Trzeba użyć os.path.splitdrive pierwszy:

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)) 

Uwagi:

  • oświadczenie with pilnuje plik zostanie zamknięty na końcu bloku (plików również uzyskać zamknięty, gdy garbage collector je, ale używanie with jest ogólnie dobrą praktyką
  • nie potrzebujesz brack ETS - os.path.splitdrive (ścieżka) zwraca krotki, a ten dostanie automatycznie rozpakowane
  • file jest nazwą klasy w standardowej przestrzeni nazw i nie należy prawdopodobnie go zastąpić :)
+0

Cześć Nk, otrzymałem następujące dane wyjściowe: Dysk jest Ścieżka "S: \ Entourage \ GIS \ HemloBelt \ Claims i plik Entourage_Claims_Master.shp", więc nie do końca to, czego się spodziewałem. Każda linia jest sformatowana w następujący sposób: "S: \ Entourage \ GIS \ HemloBelt \ Claims \ Entourage_Claims_Master.shp", – Visceral

+0

Przypuszczam, że jesteś na komputerze z systemem Windows. Przed 'napędem, ścieżką = ...' dodaj 'line = line.replace (" \\ ","/")', aby zamienić ukośniki odwrotnymi ukośnikami i zobacz, czy to wystarczy. –

+0

Dowiedziałem się, dlaczego zachowywało się tak jak on. Mój cytat otaczał każdy ciąg linii w moim oryginalnym pliku tekstowym. – Visceral

3

Możesz użyć os.path.splitdrive(), aby uzyskać napęd, a następnie path.split() resztę.

## 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)) 
+0

Dzięki za poświęcając czas na odpowiedź. – Visceral

+0

Cześć Jordanm, oto co zostało wydrukowane na moim ekranie: "kod" "S: \ Entourage \ GIS \ HemloBelt \ Roszczenia \ Entourage_Claims_Master.shp", Dysk to Ścieżka to "S: \ Entourage \ GIS \ HemloBelt \ Claims and plik to Entourage_Claims_Master.shp ", Nie do końca to, co miałem na myśli. – Visceral

Powiązane problemy