Объедините две строки из двух файлов [duplicate]

class Child(SomeBaseClass): def __init__(self): SomeBaseClass.__init__(self) Это довольно легко понять.

class Child(SomeBaseClass): def __init__(self): super(Child, self).__init__()

Хорошо, что происходит сейчас, если вы используете super(Child,self)?

Когда создается экземпляр Child, его MRO (порядок разрешения метода) находится в порядке (Child, SomeBaseClass, object) на основе наследования. (предположим, что у SomeBaseClass нет других родителей, кроме объекта по умолчанию).

Передавая Child, self, super выполняет поиск в MRO экземпляра self и возвращает прокси-объект next of Child , в этом случае это SomeBaseClass, этот объект затем вызывает метод __init__ для SomeBaseClass. Другими словами, если это super(SomeBaseClass,self), то прокси-объект, который возвращает super, будет object

. Для множественного наследования MRO может содержать много классов, поэтому в основном super позволяет вам решить, где вы хотите начать поиск в MRO.

62
задан codaddict 4 January 2013 в 12:19
поделиться

5 ответов

paste -d '\n' file1 file2
114
ответ дан codaddict 22 August 2018 в 16:41
поделиться
  • 1
    Нотабене на некоторых платформах paste довольно ограничено - например, на Solaris вы можете иметь не более 12 входных файлов, а выходные линии ограничены 511 символами. – user667489 3 December 2015 в 20:14

@ Ответ Суджоя указывает в полезном направлении. Вы можете добавить номера строк, отсортировать и разбить номера строк:

(cat -n file1 ; cat -n file2 )  | sort -n  | cut -f2-

Примечание (меня интересует) для этого требуется немного больше работы, чтобы получить право на заказ, если вместо статических файлов вы используете вывод команд, которые могут работать медленнее или быстрее друг друга. В этом случае вам необходимо добавить / отсортировать / удалить другой тег в дополнение к номерам строк:

(cat -n <(command1...) | sed 's/^/1\t/' ; cat -n <(command2...) | sed 's/^/2\t/' ; cat -n <(command3) | sed 's/^/3\t/' )  \
   | sort -n  | cut -f2- | sort -n | cut -f2-
2
ответ дан Community 22 August 2018 в 16:41
поделиться

Вот такой способ GUI: вставьте их в два столбца в электронную таблицу, скопируйте все ячейки, затем используйте регулярные выражения, чтобы заменить вкладки на новые строки.

1
ответ дан Dwedit 22 August 2018 в 16:41
поделиться

Вот решение, использующее awk:

awk '{print; if(getline < "file2") print}' file1

производит этот вывод:

line 1 from file1
line 1 from file2
line 2 from file1
line 2 from file2
...etc

Использование awk может быть полезно, если вы хотите добавить дополнительное форматирование к выходу, например, если вы хотите пометить каждую строку на основе того, из какого файла она поступает:

awk '{print "1: "$0; if(getline < "file2") print "2: "$0}' file1

производит этот вывод:

1: line 1 from file1
2: line 1 from file2
1: line 2 from file1
2: line 2 from file2
...etc

Примечание: этот код предполагает что файл1 имеет большую или равную длину для файла2.

Если файл1 содержит больше строк, чем file2, и вы хотите вывести пустые строки для файла2 после его завершения, добавьте предложение else в тест getline:

awk '{print; if(getline < "file2") print; else print ""}' file1

или

awk '{print "1: "$0; if(getline < "file2") print "2: "$0; else print"2: "}' file1
6
ответ дан samgak 22 August 2018 в 16:41
поделиться
cat file1 file2 |sort -t. -k 2.1

Здесь указано, что разделитель «.» и что мы сортируем по первому символу второго поля.

-1
ответ дан Sujoy 22 August 2018 в 16:41
поделиться
  • 1
    Я не понимаю, как это работает. Например, на входе сортировки нет двоеточия? Можете ли вы объяснить больше? – Frank 25 October 2010 в 15:31
  • 2
    мой плохой, изменил ':' на '. его просто разделитель, если не указан сортировка, используется пустое поле для разделения полей. man sort для получения дополнительной информации. – Sujoy 25 October 2010 в 16:05
  • 3
    Этот ответ предполагает, что вход фактически принимает литеральную форму, описанную в вопросе. Я думаю, что это должно было быть иллюстративным. Можно было бы преобразовать каждый входной файл таким образом, но это было бы намного больше проходит через данные. Ответ codaddict лучше. – Phil Miller 25 October 2010 в 16:07
  • 4
    @Novelocrat: Да, это просто еще один способ сделать это :) – Sujoy 25 October 2010 в 16:12
Другие вопросы по тегам:

Похожие вопросы: