$ Python $ OUTPUT_RECORD_SEPARATOR и $ INPUT_RECORD_SEPARATOR эквивалент - PullRequest
0 голосов
/ 21 апреля 2009

Есть ли в Python эквивалент $ OUTPUT_RECORD_SEPARATOR или $ \ in Perl?

UPDATE: Я полностью ошибся ... Я искал Python, эквивалентный $ INPUT_RECORD_SEPARATOR, если есть такая вещь? Что-то, что вы можете переопределить, чтобы при вызове типа readline () он вызывал что-то отличное от символа новой строки. Прошу прощения, что испортил оригинальный вопрос.

Ответы [ 5 ]

1 голос
/ 30 апреля 2009

Если вы хотите, чтобы любой из \r, \n или \r\n на входе был виден как новая строка, тогда вы можете использовать «универсальную поддержку новой строки» в вашем «open ()» звоните.

В Python 2.6 open () , это нужно явно включить, добавив «U» в строку режима:

in_file = open('foo.txt', 'rU')

Это также зависит от того, доступна ли эта поддержка в интерпретаторе Python; но в документах сказано, что это доступно по умолчанию.

В Python 3.0 open () универсальное поведение новой строки всегда доступно и является поведением по умолчанию; Вы можете выбрать другое поведение с другими значениями для параметра newline.

Если вы хотите, чтобы ввод интерпретировал записи, оканчивающиеся чем-то другим, кроме новой строки, то вам не нужны «readlines» (которые, согласно имени, читают строки конкретно, а не записи вообще), и AFAIK придется реализовать свой собственный код чтения записи.

1 голос
/ 21 апреля 2009

Функция печати Python 3 имеет sep и end аргументы.

print('foo', 'bar', 'baz', sep='|', end='#')

Обратите внимание, что в Python 3 print больше не является оператором, это функция.

1 голос
/ 21 апреля 2009

Вы можете использовать метод '' .join. например,

# print 'foo', 'bar', 'baz' separated by spaces
print 'foo', 'bar', 'baz'
# print separated by commas
print ', '.join(['foo', 'bar', 'baz'])

EDIT:

Хорошо, я неправильно понял цель OUTPUT_RECORD_SEPARATOR, поэтому '. Присоединиться не то, что вы хотите.

print 'foo' эквивалентно sys.stdout.write('foo'+'\n'), так что вы можете свернуть свою собственную функцию печати:

def myprint(*args, end='\n'):
    sys.stdout.write(' '.join(args) + end)

Или перейти на один шаг дальше с заводской функцией:

def make_printer(end):
    def myprint(*args, end='\n'):
        sys.stdout.write(' '.join(args) + end)
    return myprint

# usage:
p = make_printer('#')
p('foo', 'bar', 'baz')

Наконец, если вы решитесь, вы можете переопределить sys.stdout:

sys.old_stdout = sys.stdout
class MyWrite(object):
    def __init__(self, end='\n'):
        self.end = end
    def write(self, s):
        sys.old_stdout.write(s.replace('\n', self.end))

Это приведет к тому, что операторы print приведут к альтернативному окончанию строки. Использование:

sys.stdout = MyWrite('!\n')
print 'foo'
# prints: foo!

Обратите внимание, что вам может потребоваться переопределить больше, чем просто write () или, по крайней мере, предоставить перенаправления для таких вещей, как MyWrite.flush (), в sys.old_stdout.flush ().

0 голосов
/ 03 мая 2009
open('file').read().split(your_separator_of_choice)

единственное отличие от readlines() здесь в том, что в результате элементы списка не будут иметь разделитель в конце.

0 голосов
/ 21 апреля 2009

В Python pre-3 вы можете запретить добавление стандартного разделителя ',' в конце строки:

print yourVar,  #these 3 lines print without any newline separator
print yourVar, 
print yourVar, 

если вы хотите использовать нестандартный разделитель, отключите обычный и напечатайте ваш:

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