Если открыть выходной файл как «термометр», то он принимает поток байт, а не юникод аргументы:
s = 'слово'
with open('data.txt','wb') as f:
f.write(s.encode('unicode_escape'))
f.write(b'\n') # add a line feed
Это, кажется, что вы хотите:
$ cat data.txt
\u0441\u043b\u043e\u0432\u043e
и его позволяет избежать как декодирования, так и любого перевода, который происходит при записи в текстовый поток.
Обновлено использовать закодировать ('unicode_escape') в соответствии с предложением @ J.F.Sebastian.
% timeit сообщает, что это совсем немного быстрее, чем закодировать ('ASCii', 'backslashreplace'):
In [18]: f = open('data.txt', 'wb')
In [19]: %timeit f.write(s.encode('unicode_escape'))
The slowest run took 224.43 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 1.55 µs per loop
In [20]: %timeit f.write(s.encode('ascii','backslashreplace'))
The slowest run took 9.13 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 2.37 µs per loop
In [21]: f.close()
Любопытно, что отставание от timeit для кодирования ('unicode_escape') намного длиннее чем от encode ('ascii', 'backslashreplace'), даже если время в петле быстрее, поэтому обязательно проверяйте как в своей среде.
эта версия на основе python? –
@Ni. Я использую python 3 – reynoldsnlp
Если вы часто это делаете, просто напишите очень короткую функцию, чтобы сделать это за вас. Не беспокойтесь об эффективности, если нет веских оснований для этого. –