2011-07-19 17 views
5

Bir dizinden okunan sıraya göre bir csv dosyasına çıktı yazan bir program ile çalışıyorum. Ancak sonları 1,2,3,4,5,6,7,8,9,10,11,12 ile çok sayıda dosya ile. Programım aslında dosyaları alfabetik sıralı olarak okuyor: 1,10,11,12 ...., 2,20,21 ..... 99. Sorun şu ki, başka bir program, siparişin sayısal sıralamada olduğunu varsayar ve grafik sonuçlarını çarpıtır.Okumadan önce bir dizindeki dosyaları nasıl sıralayabilirim?

aslında dosya gibi görünür: String.ext.ext2.1.txt, String.ext.ext2.2.txt, vb ...

nasıl piton komut ile yapabilirsiniz?

cevap

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

İkinci satırın nasıl çalıştığını açıklayabilir misiniz? – Jim

+2

'sıralanmış_files = sıralanmış (dosyalar, anahtar = lambda x: int (x.split ('.') [3])) " Sıralanan "işlevler, ikinci bağımsız değişken tarafından verilen bir seçiciyi kullanarak ilk bağımsız değişkeni sıralar. Tabloyu belirli bir sütuna göre sıralamayı düşünün. Şimdi, ikinci argüman için. Bu, dosya adınızı bir parça listesine dönüştürerek ('.' ile ayrılmış) ve bu listedeki 3. öğeyi alarak bir işlevdir. –

+1

Bununla çalışmak için var: sort_files = sıralanmış (file_list, key = lambda x: int (x. split ('.') [3]) if (x.endswith ("txt")) başka x) – Jim

5

Program listenizdeki dosya listenizi sıralayın. Dosyaları doğru sırayla vermek için işletim sistemi çağrılarına güvenmeyin, kullanılan gerçek dosya sistemine bağlıdır.

1

Böyle bir şey kullanabilirsiniz:

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. Kullanım os.listdir dosya adlarının bir listesini almak için.
  2. Listeyi natural sort order kullanarak sıralayın.
  3. Dosyaları sıralı listeniz sırasına göre işleyin.
İlgili konular