В других предложениях (я недостаточно авторитет, чтобы комментировать, извините!), вы можете попробовать плагин TableSorter для обработки только отображения полезного количества данных за раз.
Я не знаю, как это работает при очень большом количестве строк, но их пример данных составляет 1000 строк или около того.
Это не помогло бы с JS-производительностью, но сохранит нагрузку с браузера.
Python 3.5+
Так как вы находитесь на новом питоне, вы должны использовать pathlib.Path.rglob
из pathlib
модуля.
from pathlib import Path
for filename in Path('src').rglob('*.c'):
print(filename)
Если вы не хотите использовать путь, просто используйте glob.glob
, но не забудьте пройти в параметре ключевого слова recursive
.
Для случаев, когда совпадают файлы, начинающиеся с точки (...); например, файлы в текущем каталоге или скрытые файлы в системе на базе Unix, используйте решение os.walk
ниже.
Старые версии Python
Для старых версий Python используйте os.walk
для рекурсивного прохождения по каталогу и fnmatch.filter
для сравнения с простым выражением:
import fnmatch
import os
matches = []
for root, dirnames, filenames in os.walk('src'):
for filename in fnmatch.filter(filenames, '*.c'):
matches.append(os.path.join(root, filename))
Для Python> = 3.5 можно использовать **
, recursive=True
:
import glob
for x in glob.glob('path/**/*.c', recursive=True):
print(x)
<час> , Если рекурсивный верна, шаблон
**
будет соответствовать любым файлам и нуль или большеdirectories
иsubdirectories
. Если шаблон сопровождаетсяos.sep
, только каталоги иsubdirectories
соответствие.
Вы захотите использовать os.walk
для сбора имена файлов, соответствующих вашим критериям. Например:
import os
cfiles = []
for root, dirs, files in os.walk('src'):
for file in files:
if file.endswith('.c'):
cfiles.append(os.path.join(root, file))
, аналогично другим решениям, Но используя fnmatch.fnmatch вместо chob, поскольку os.walk уже перечислил имена файлов:
import os, fnmatch
def find_files(directory, pattern):
for root, dirs, files in os.walk(directory):
for basename in files:
if fnmatch.fnmatch(basename, pattern):
filename = os.path.join(root, basename)
yield filename
for filename in find_files('src', '*.c'):
print 'Found C source:', filename
также, использование генератора предупреждает вас, чтобы обработать каждый файл, как он найден, вместо того, чтобы найти все файлы , а затем Обработка их.
import os
import fnmatch
def recursive_glob(treeroot, pattern):
results = []
for base, dirs, files in os.walk(treeroot):
goodfiles = fnmatch.filter(files, pattern)
results.extend(os.path.join(base, f) for f in goodfiles)
return results
fnmatch
дает вам точно такие же шаблоны, как glob
, так что это действительно отличная замена для glob.glob
с очень близкая семантика. Итерационная версия (например, генератор), IOW вместо glob.iglob
, представляет собой тривиальную адаптацию (просто выдают
промежуточные результаты по ходу, вместо расширять
с одним списком результатов для возврата в конце).