Использование python под linux для подсчета строк во всех файлах в папке через терминал

Я использую Ubuntu с python 2.7,

Мне нужно взять все файлы в папку и подсчитать строки в каждом файле отдельно и выгрузить его в файл.

Я нашел, как это сделать через терминал напрямую, используя параллельную обработку здесь

Он срабатывает, когда я пытаюсь:

subprocess.Popen('ls %s* | parallel -k zcat {} | wc -l >%s'%(dir,outputfile), shell=True) 

Теперь я пытаюсь использовать эту команду терминала через python, похоже, что он не может взять список файлов и использовать их в качестве файлов, а только для подсчета длины списка файлов.

 p1 = subprocess.Popen(["ls", dest], stdout=subprocess.PIPE) output = subprocess.check_output(["wc", "-l"], stdin=p1.stdout) 

Дает мне количество файлов в папке, когда мне нужен список количества строк в каждом файле.

Как я могу использовать python для выполнения команды, которая будет: дайте мне список количества строк в каждом файле в папке и сделайте это с помощью параллельного (или любого другого хорошего метода многокорневой сборки)

    Вы можете использовать материал в стандартной библиотеке, не выходя из оболочки:

    import os

     from multiprocessing import Pool folder = '.' fnames = (name for name in os.listdir(folder) if os.path.isfile(os.path.join(folder, name))) def file_wc(fname): with open(fname) as f: count = sum(1 for line in f) return count pool = Pool() print(pool.map(file_wc, list(fnames))) 

    Если вы хотите записать имена файлов

     def file_wc(fname): with open(fname) as f: count = sum(1 for line in f) return (fname, count) print(dict(pool.map(file_wc, list(fnames)))) 

    Считать файлы, директории и путь в папке

     import os path, dirs, files = os.walk("/home/my_folder").next() file_count = len(files) 

    Подсчитайте строки в файле, я попытался найти способ подсчета строк без открытия файла, но я не могу

     with open() as f: print len(f.readlines()) 

    Теперь у вас есть список файлов (переменные файлы в примере), вам просто нужно присоединиться к этим двум частям кода, чтобы получить количество строк для каждого файла в файлах переменных

    На самом деле вам не нужно использовать внешние процессы для выполнения этой задачи в python. Python может сделать это за вас. Вот fragment python3:

     import os for x in os.listdir(): if os.path.isfile(x): with open(x, 'rb') as f: print('{} lines: {}'.format(x, sum(1 for line in x))) 

    Ниже приведена дополнительная информация о прослушивании файлов в каталоге , получении количества строк в файле и подсчете строк для огромных файлов

    Вы можете использовать многопроцессорную систему вместе с системными вызовами. Вам не нужно использовать очередь здесь и просто распечатать результаты напрямую.

     import multiprocessing as mp from subprocess import Popen, PIPE output = mp.Queue() def count_lines(path, output): popen = Popen(["wc", "-l", path], stdout=PIPE, stderr=PIPE) res, err = popen.communicate() output.put(res.strip()) popen = Popen(["ls", "."], stdout=PIPE, stderr=PIPE) res, err = popen.communicate() processes = [mp.Process(target=count_lines, args=(path.strip(), output)) for path in res.split('\n') if path] # Run processes for proc in processes: proc.start() for proc in processes: proc.join() results = [output.get() for proc in processes] non_empty = [result for result in results if result] print(non_empty) 

    Ссылка:

    https://sebastianraschka.com/Articles/2014_multiprocessing.html