Разделить результаты os.popen - PullRequest
0 голосов
/ 11 июня 2018

Я использую python3.6 для автоматического поиска некоторых файлов на моем компьютере:

import os
criteria = 'something'
file_names = os.popen('find dir -name "*%s*"' % criteria).read()
for file_name in file_names:
   #do something
   pass

Проблема в том, что при выполнении .read () все имена файлов, включая некоторые критерии, объединяются в одинстрока.Как я могу получить список имен файлов в качестве вывода для итерации в цикле 'for'?Большое спасибо

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Просто добавьте split() после read() функции, как показано ниже:

file_names = os.popen('find dir -name "*%s*"' % criteria).read().split()

Дело в том, что read функция возвращает необработанную строку из вывода, скажем, как показано ниже:

>>> os.popen('find . -name "*%s*"' % criteria).read()
'./pymp-0kz_4tay\n./pymp-4zfymo3o\n./pymp-k79d3tvz\n./pymp-wq9g900h\n./pymp-v0jvlbzm\n./pymp-lc69tv22\n./pymp-3sqjot2q\n./pymp-fsfv6c3t\n./pymp-

где критерии pymp в моем случае.Таким образом, из вывода ясно, что я должен разделить вывод на \n, что делается методом split('\n').

Пример вывода

>>> file_names = os.popen('find . -name "*%s*"' % criteria).read().split('\n')
>>>
>>>
>>> for file in file_names: print(file)
...
./pymp-0kz_4tay
./pymp-4zfymo3o
./pymp-k79d3tvz
./pymp-wq9g900h
0 голосов
/ 11 июня 2018

В общем случае вы хотите разбить строку.Самый простой способ - использовать встроенный метод .split() строк Python.Пример:

>>> ' 1  2   3  '.split()
['1', '2', '3']

Подробнее см. в документации

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