Как получить пути к файлам в каталоге, включая подкаталоги? - PullRequest
0 голосов
/ 13 марта 2019

Ответ был дан раньше, но код популярного ответа не работает в Windows.

Я изучаю Python и пытаюсь написать сценарий для подсчета строк кода в .NET-проекте.

С моей структурой каталогов он находит не все файлы, а только несколько, проект находится здесь:

https://github.com/stax76/mpv.net

Сценарий выглядит так:

import os

root = r"C:\Users\frank\Daten\Projekte\CS\mpv.net"

allLines = []

for path, subdirs, files in os.walk(root):
    for name in files:
        filepath = os.path.join(path, name)

        if not filepath.endswith( ('.cs','.vb') ):
            break

        with open(filepath) as f:
            lines = f.read().splitlines()

            for line in lines:
                allLines.append(line)

print(len(allLines))

Ответы [ 2 ]

1 голос
/ 13 марта 2019

В вашем случае проблема заключается в break, если файл не заканчивается на .cs или .vb, вы просто пропускаете каталог, вам нужно изменить его на continue следующим образом:

import os

root = r"C:\Users\frank\Daten\Projekte\CS\mpv.net"

allLines = []

for path, subdirs, files in os.walk(root):
    for name in files:
        filepath = os.path.join(path, name)

        if not filepath.endswith( ('.cs','.vb') ):
            continue

        with open(filepath) as f:
            lines = f.read().splitlines()

            for line in lines:
                allLines.append(line)

print(len(allLines))

Этот код также может получать улучшения:

import os

root = r"C:\Users\frank\Daten\Projekte\CS\mpv.net"

allLines = 0

for path, subdirs, files in os.walk(root):

    for name in files:

        if not filepath.endswith( ('.cs','.vb') ):
            continue

        filepath = os.path.join(path, name)

        with open(filepath) as f:
            lines += len(f.read().splitlines())

print(allLines)
0 голосов
/ 13 марта 2019

С помощью теперь все хорошо, спасибо!

import os

root = r"C:\Users\frank\Daten\Projekte\CS\mpv.net"

count = 0

for path, subdirs, files in os.walk(root):
    for name in files:
        if not name.endswith( ('.cs','.vb') ):
            continue
        filepath = os.path.join(path, name)

        with open(filepath) as f:
            count += len(f.read().splitlines())

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