Как упорядочить список имен папок в алфавитном порядке, используя python - PullRequest
0 голосов
/ 18 июня 2020

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

Они, очевидно, находятся в каталоге файлов, но когда я разделил части имен папок, они не будут печататься в алфавитном порядке порядок.

Это код:

import os, datetime
from tkinter import Tk
from tkinter.filedialog import askdirectory

SelectDrive = askdirectory(title='Select Folder') 
SubjectDetail = os.listdir(SelectDrive)

ListLen = (len(SubjectDetail))
SplitList = [i.split() for i in SubjectDetail]

i = 0

while i < ListLen:
    Name = SplitList[-i]
    NameLen =len(Name)

    DateOfBirth = (Name[NameLen-1])
    Name.remove(DateOfBirth)

    FullName = ' '.join(Name)

    print(FullName," ", DateOfBirth)

    i += 1

и текущий вывод:

Arthur LEWIS 06111984
Sarah Rose WILLIAMS 23091974
Mark THOMAS 11062020
Lewis MCCARTNEY 15021994

и, наконец, результат, который я ищу:

Arthur LEWIS 06111984
Lewis MCCARTNEY 15021994
Mark THOMAS 11062020
Sarah Rose WILLIAMS 23091974

Ответы [ 3 ]

0 голосов
/ 18 июня 2020

Name = SplitList[-i] это ваша проблема. Когда вы используете отрицательный индекс, Python начинает отсчет с конца списка, начиная с 1. Итак, если у вас был список, a = [1, 2, 3, 4, 5], если вы сделаете a[-2], он будет считать 5 как индекс -1 затем 4 как индекс -2 и вернет его вам. Вот почему он возвращает первое имя файла, потому что -0 интерпретируется как индекс 0, но индекс -1 означает последний элемент списка, индекс -2 будет вторым последним элементом и т. Д.

Я написал код, он выводит то же, что вы просили, но я не уверен, что он соответствует вашим потребностям:

import os
from tkinter.filedialog import askdirectory

SelectDrive = askdirectory(title='Select Folder') 
SubjectDetail = os.listdir(SelectDrive)

SplitList = [i.split() for i in SubjectDetail]

for person in SplitList:
    print(*person)

Если вы хотите, чтобы ваш код оставался примерно таким же, вы должны иметь возможность просто использовать индекс i, но без добавления отрицательного знака, и это должно решить вашу проблему: Name = SplitList[i].

Ура.

0 голосов
/ 18 июня 2020

Я изменил свой while l oop, поэтому теперь он проверяет, превышает ли длина списка i. Это позволяет выводить данные по порядку.

while ListLen > i:
    Name = SplitList[+i]
    NameLen =len(Name)
    NameSort = []
    DateOfBirth = (Name[NameLen-1])

    Name.remove(DateOfBirth)

    FullName = ' '.join(Name)

    print(FullName, " ",DateOfBirth)

    i += 1
0 голосов
/ 18 июня 2020

Существует библиотека pathlib для работы с путями. Таким образом, вы можете использовать что-то вроде

from pathlib import Path
from tkinter.filedialog import askdirectory

SelectDrive = askdirectory(title="Select Folder")
path = Path(SelectDrive)

list_of_dirs = sorted([i for i in path.iterdir() if i.is_dir()])

for d in list_of_dirs:
    print(d)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...