Как отсортировать файлы в каталоге перед чтением? - PullRequest
6 голосов
/ 19 июля 2011

Я работаю с программой, которая записывает вывод в файл csv в порядке, в котором файлы считываются из каталога. Однако с большим количеством файлов с окончаниями 1,2,3,4,5,6,7,8,9,10,11,12. Моя программа на самом деле читает файлы по алфавиту: 1,10,11,12 ...., 2,20,21 ..... 99. Проблема заключается в том, что другая программа предполагает, что упорядочение выполняется в порядке нумерации, и искажает результаты графика.

Фактически файл выглядит так: String.ext.ext2.1.txt, String.ext.ext2.2.txt и т. Д. *

Как я могу сделать это с помощью скрипта Python?

Ответы [ 4 ]

13 голосов
/ 19 июля 2011
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']
5 голосов
/ 19 июля 2011

Сортировка списка файлов в программе.Не полагайтесь на вызовы операционной системы, чтобы привести файлы в правильном порядке, это зависит от фактической используемой файловой системы.

4 голосов
/ 19 июля 2011
  1. Используйте os.listdir , чтобы получить список имен файлов.
  2. Сортировка списка, используя естественный порядок сортировки .
  3. Обрабатывайте файлы в порядке отсортированного списка.
1 голос
/ 19 июля 2011

Вы можете использовать что-то вроде этого:

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]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...