Как печатать с добавлением, пользовательским разделителем и подавлением конечного пробела в Python 2?

Я печатаю свой вывод в файл с помощью этой команды:

print >> outfile, columns2[0],"\t",columns2[1],"\t",columns2[2]

Моя проблема в том, что у меня есть «пробел» в конце содержимого каждого столбца.

Я знаю, что иногда это можно решить с помощью sep:

print('foo', 'bar', sep='')

Но я не знаю, как реализовать sep при записи в файл с помощью моей команды выше:

print >> outfile

person Pol    schedule 24.11.2016    source источник
comment
Почему бы вам не write в файл?   -  person    schedule 24.11.2016
comment
Я думаю, что он имеет в виду пробел, вставленный в каждую запятую, а не NL.   -  person totoro    schedule 24.11.2016
comment
Вы спрашиваете о Python 3 или 2? Если Python 3, это может быть закрыто как дубликат справки по синтаксису python sep="", ' \т'   -  person smci    schedule 24.11.2016


Ответы (3)


Пробел возникает из-за использования запятых в print (Python 2.7?).

print >> outfile, '\t'.join(columns2)

Должен решить эту проблему.

person totoro    schedule 24.11.2016

Вы можете использовать метод файла write, при использовании метода записи не будет дополнительной новой строки в конце. Рекомендуется также использовать метод соединения строк с оператором +.

outfile.write('\t'.join(column2))
# add + '\n' if need the new line
# use column2[:2] if you have more items in list and only need slice of them
person Skycc    schedule 24.11.2016
comment
Ваша команда присоединения очень интересна, но я получаю следующую ошибку: имя «присоединение» не определено - person Pol; 24.11.2016
comment
Не должно быть ошибки, я проверил работу, убедитесь, что у вас точно '\t'.join , дважды проверьте '\t'. перед соединением - person Skycc; 24.11.2016

Функцию print() можно использовать для печати в любой файл, а не только sys.stdout. Пытаться:

from __future__ import print_function

print(*columns2, sep="\t", file=outfile)

Из документации на print():

print(*objects, sep=' ', end='\n', file=sys.stdout)

Аргумент file должен быть объектом с методом write(string); если он отсутствует или None, sys.stdout использоваться.

person Eugene Yarmash    schedule 24.11.2016