удалить все из вывода, который стоит за ":" - PullRequest
0 голосов
/ 25 апреля 2011

, когда python выдает мне вывод в виде, подобном:

randomfilename.txt:randomstringmniaonovinaio

Как я могу сделать из него просто

randomfilename.txt

в python / shell?

Ответы [ 5 ]

2 голосов
/ 25 апреля 2011
>>> s = "randomfilename.txt:dslfkjsdosdfu"
>>> print s.split(":")[0]
randomfilename.txt
2 голосов
/ 25 апреля 2011
>>> 'randomfilename.txt:randomstringmniaonovinaio'.split(':')[0]
'randomfilename.txt'
1 голос
/ 25 апреля 2011

В оболочке вы можете использовать cut:

python yourscript.py | cut --delim=":" -f 1

Будет напечатана только строка перед первым :. Если вы не хотите получать эти строки без :, в случае, если такие строки появляются в вашей программе, вы также можете добавить -s к команде.

0 голосов
/ 25 апреля 2011

Другие пользователи дали ответы на Python. Если по какой-либо причине вы хотите сделать это с помощью утилит Unix, я думаю, вы можете просто пойти на:

randomFileName=`echo $yourString | sed 's/^\(.*\.txt\):.*/\1/'`

Это просто операция замены sed.

Бит в экранированных скобках просто соответствует любому набору символов, который заканчивается на .txt, и сохраняет его в буфере. Следующий бит соответствует двоеточию и любому тексту после него. ^ означает совпадение с начала $yourString.

Затем \1 заменяет все, что ему соответствует, на то, что находится в первом буфере паттернов. В этом случае это должно быть ваше произвольное имя файла.

0 голосов
/ 25 апреля 2011

Метод разделения неэффективен, если вы делаете это часто, и в этом случае может быть лучше использовать:

>>> s='randomfilename.txt:randomstringmniaonovinaio'
>>> s[:s.find(':')]
'randomfilename.txt'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...