Python-эквивалент GNU 'cat', который показывает уникальные строки - PullRequest
3 голосов
/ 08 февраля 2010

Кто-нибудь написал команду Python GNU cat и хотел бы поделиться? GNU cat на самом деле немало, и я не очень хочу изобретать велосипед сегодня. Да, я сделал поиск в Google и, прочитав слишком много печальных историй о котятах и ​​змеях Я решил попробовать ТАК.

Редактировать: я хотел бы изменить его так, чтобы он показывал только уникальные строки.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2010

Последний: Спасибо Неду за подсказку для ввода файла! Вот последний:

#!/usr/bin/python

"""cat the file, but only the unique lines
"""
import fileinput

if __name__ == "__main__":
    lines=set()
    for line in fileinput.input():
        if not line in lines:
            print line,
            lines.add(line)

Ранее (2010-02-09):

Вот что я закончил. Это работает для моей насущной необходимости. Спасибо Майк Грэм за вашу помощь.

#!/usr/bin/python
"""cat the file, but only the unique lines
"""
import optparse
import sys

if __name__ == "__main__":
    parser = optparse.OptionParser()
    parser.set_usage('%prog [OPTIONS]')
    parser.set_description('cat a file, only unique lines')

    (options,args) = parser.parse_args()

    lines = set()
    for file in args:
        if file == "-":
            f = sys.stdin
        else:
            f = open(file)
        for line in f:
            if not line in lines:
                print line,
                lines.add(line)
2 голосов
/ 08 февраля 2010

Это зависит от того, какие функции вы хотите. Если вы просто хотите распечатать файл, вы можете сделать

with open('myfile') as f:
    for line in f:
        print line,

или объединить некоторые файлы, вы можете сделать

filenames = ['file1', 'file2', 'file3']
for filename in filenames:
    with open(filename) as f:
        for line in f:
            print line,

Нет общего ответа. В зависимости от функциональности, которую вы хотите скопировать, ваш код будет отличаться. Чтобы точно воспроизвести что-то странное и особенное, используйте модуль subprocess и вызовите cat.

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

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