2011-07-19 15 views
5

Pracuję z programem, który zapisuje dane wyjściowe do pliku csv na podstawie kolejności odczytywania plików z katalogu. Jednak z dużą liczbą plików z zakończeniami 1,2,3,4,5,6,7,8,9,10,11,12. Mój program odczytuje pliki według mojej kolejności alfabetycznej: 1,10,11,12 ...., 2,20,21 ..... 99. Problem polega na tym, że inny program zakłada, że ​​kolejność jest porządkowana numerycznie i pochyla wyniki wykresu.Jak sortować pliki w katalogu przed przeczytaniem?

Faktycznie plik wygląda następująco: String.ext.ext2.1.txt, String.ext.ext2.2.txt, i tak dalej ...

Jak mogę to zrobić z skrypt Pythona?

Odpowiedz

12
files = ['String.ext.ext2.1.txt', 'String.ext.ext2.12.txt', 'String.ext.ext2.2.txt'] 
# files: coming from os.listdir() sorted alphabetically, thus not numerically 

sorted_files = sorted(files, key=lambda x: int(x.split('.')[3])) 
# returns: ['String.ext.ext2.1.txt', 'String.ext.ext2.2.txt', 'String.ext.ext2.12.txt'] 
+0

Czy możesz wyjaśnić, jak działa druga linia? – Jim

+2

'sorted_files = posortowane (pliki, klucz = lambda x: int (x.split ('.') [3]))' Funkcje "posortowane" sortują pierwszy argument za pomocą selektora podanego przez drugi argument. Pomyśl o sortowaniu tabeli według określonej kolumny. Teraz, dla drugiego argumentu. Jest to funkcja przekształcająca twoją nazwę pliku na listę części (oddzieloną przez ".") I przyjęcie trzeciego elementu na tej liście. –

+1

Gotowy do pracy z tym: sorted_files = posortowane (file_list, key = lambda x: int (x. split ('.') [3]) if (x.endswith ("txt")) else x) – Jim

5

Sortuj listę plików w programie. Nie polegaj na wywołaniach systemu operacyjnego, aby pliki były w odpowiedniej kolejności, zależy to od używanego systemu plików.

1

Można użyć czegoś takiego:

fileNames = ['String.ext.ext2.2.txt', 'String.ext.ext2.20.txt', 'String.ext.ext2.1.txt', 'String.ext.ext2.10.txt', 'String.ext.ext2.11.txt', 'String.ext.ext2.0.txt',] 
fileNames = sorted(fileNames, key=lambda y: int(y.rsplit('.', 2)[1])) 
4
  1. Zastosowanie os.listdir aby uzyskać listę nazw plików.
  2. Sortuj listę, używając natural sort order.
  3. Przetwarzaj pliki w kolejności posortowanej listy.
Powiązane problemy