Python функция os.listdir не показывает все файлы в каталоге - PullRequest
0 голосов
/ 16 апреля 2020

Привет, я пытаюсь загрузить пару файлов с os.listdir, но он пропускает несколько файлов.

Формат файлов в директивах:

a_0.csv
a_1.csv
a_2.csv
  ·
  ·
  ·
a_25.csv

Но os.listdir принимает только файл 0,1,10,11 .. Файл с номерами 3,4,5 ... нет в выходном объекте.

А вот моя функция:

def best_fit_from_attemp(self):
    arr =[]
    for i in os.listdir(self.path_to_files):
        print("i",i)
        if i[0] == 'f' and  i[1] == 'i' and i[2] == 't':
            print("searching for smallest number... ",i)
            arr.append(self.find_min_fitness(i))

Вывод:

i fitness_gen_0.csv
searching for smallest number...  fitness_gen_0.csv
i fitness_gen_1.csv
searching for smallest number...  fitness_gen_1.csv
i fitness_gen_10.csv
searching for smallest number...  fitness_gen_10.csv
i fitness_gen_11.csv
searching for smallest number...  fitness_gen_11.csv

Ответы [ 3 ]

1 голос
/ 16 апреля 2020

Я предполагаю, что все имена файлов есть, но не в том порядке, в котором вы ожидаете.

Имена файлов являются строками. Они отсортированы в соответствии с логикой сортировки строк c: представьте себе, заменяя каждые 0 на a, каждые 1 на b, каждые 2 на c и т. Д., И теперь подумайте о том, как строки будут заказывать в алфавитном порядке. Обычная сортировка строк не знает, что нам нравится писать числа с наименьшим значением-di git last . При обычной сортировке строк это действительно go 1, затем 10, затем 11 - это аналогично порядку строк b, затем ba, затем bb, что является правильным словарем упорядоченность. Он будет go включаться в течение длительного времени, прежде чем доберется до чего-либо, начинающегося с 3 (аналогично, слова в словаре, начинающиеся с d, встречаются намного позже, чем что-либо, начинающееся с b).

Вы можете исследовать алгоритмы / пакеты, которые выполняют «естественную сортировку». Или, наиболее предпочтительным вариантом будет просто исправить соглашение об именовании файлов, чтобы начать с: убедитесь, что числа, встроенные в ваши имена файлов, имеют одинаковое количество цифр, с ведущими нулями, где это необходимо (001, 002, и др * * тысяча двадцать-шесть).

0 голосов
/ 16 апреля 2020

Это кажется сомнительным.

self.find_min_fitness(i)

Ну, я бы посоветовал вам попробовать что-то вроде этого.

Ниже в каталоге находится список файлов с номерами.

files = os.listdir("C:/Users/Danish/Documents/JavaScriptPrimerRepo/MyJSCodes")

for i in files:
    print(i)

Ниже приведен пример выходных данных.

00_BlankPage.html
01_DataType.html
02_LinkingExternalJsfile.html
02_Script.js
03_VariableMutation_cohersion.html
04_Operators.html
05_SampleCodeCalculatingBMI.html

ПРИМЕЧАНИЕ. Я сохранил результат в отдельной переменной перед итерацией, и, что важно, fileName начинается с числа вначале.

0 голосов
/ 16 апреля 2020

Я был бы совершенно уверен, что проблема заключается в функции self.find_min_fitness(i). Некоторые части в нем должны вызывать сбой программы после перечисления первой пары файлов.

Файлы отсортированы по имени по os.listdir(). Он предпочитает 1 над 2 при перечислении файлов, поэтому все имена файлов, начинающиеся с 1, указываются первыми.

В качестве решения: возможно, попробуйте закомментировать эту строку, где self.find_min_fitness(i) вызывается и посмотреть, возникает ли проблема по-прежнему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...