Чтение каталога для файлов с последующим отображением их на поверхности Pygame - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть функция, которая читает каталог под названием «Игры» и просматривает определенные файлы.Эта часть отлично работает.Проблема заключается в том, что я хочу вычислить, сколько файлов существует, и для каждого файла я хочу добавить 10 к переменной.

def games():
    f = 0
    sy = 100
    ftext = pygame.font.SysFont("Arial", 20)
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
        screen.fill(DarkSpace)
        ToolBarButton("Home", 0, 0, 150, 50, SpaceGrey, CornflowerBlue, 10, cmain)
        ToolBarButton(username, 153,0,150,50, SpaceGrey, CornflowerBlue, 10, accountDetails)
        ToolBarButton("Programs", 305,0,150,50, SpaceGrey, CornflowerBlue, 10, programs)
        ToolBarButton("Games", 458,0,150,50, SpaceGrey, CornflowerBlue, 10, games)
        ToolBarButton("Help", 610,0,150,50, SpaceGrey, CornflowerBlue, 10, hel)
        DropDown(NeonGreen, CornflowerBlue, 764, 16, 30, 30, DropMenu)
        Btext(screen, "Loading Games!", CornflowerBlue, ftext, 600,600,600,600)
        fileDir = os.listdir(r"D:\Users\26099\Desktop\Programming\Dark_Dragons\Blunt_Wars1\venv\Launcher\Games")
        nf = len(fileDir)
        while nf > f:
            f += 1
            sy += 10
            break
        print(sy)
        for fileN in fileDir:
            verif = fileN.endswith('.py') or fileN.endswith('.pyw')
            if not verif:
                fileDir.remove(fileN)
            else:
                print(fileN)
                text(screen, fileN, CornflowerBlue, ftext, 300,sy)
        pygame.display.update()

Поэтому я хочу добавить 100 к sy для каждого файла с определенным расширением,Я попытался поместить его в цикл for, но я получил сообщение о том, что объект int не вызывается, поэтому кто-нибудь знает, как это сделать

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

используйте os.walk.

x = [_ for _ in os.walk("../source")][0]

# index-10-> file path
# index-1 -> folders in directory
# index-2 -> files in directory
0 голосов
/ 14 ноября 2018

Чтобы получить количество файлов в каталоге, вы можете сделать это (это называется «понимание списка» и похоже на цикл for, который добавляет файлы в пустой список):

files = [f for f in os.listdir() if os.path.isfile(f)]
num_files = len(files)

Если вы хотите посчитать конкретные расширения, вы можете сделать что-то вроде этого (лучше использовать словарь вместо отдельных переменных):

py_files = 0
pyw_files = 0
for file_name in os.listdir():
    if file_name.endswith('.py'):
        py_files += 1
    elif file_name.endswith('.pyw'):
        pyw_files += 1

Или более изощренным способом с collections.Counter:

import collections

extensions = collections.Counter(
    os.path.splitext(f)[1] for f in os.listdir() if os.path.isfile(f))
print(extensions, sum(extensions.values()))

Дополнительные примечания:

Не изменяйте списки, пока вы перебираете их. Это приводит к неожиданным результатам. Вместо этого создайте новый отфильтрованный список.

Цикл while nf > f: выглядит бессмысленным. Вы можете просто умножить nf на 10: sy = nf * 10. Кроме того, поскольку вы вызываете break, вы завершаете цикл после первой итерации.

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

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