2013-04-20 3 views
0

Для моего проекта мне нужно иметь возможность хранить случайные строки байтов в файле и снова читать байтовую строку. Например, я хочу, чтобы хранить randomByteString из следующего кода:Хранение случайной строки байта в Python

>>> from os import urandom 
>>> randomByteString=urandom(8) 
>>> randomByteString 
b'zOZ\x84\xfb\xceM~' 

Что бы правильный способ сделать это?

Редактировать: Забыл отметить, что я также хочу сохранить строку «normal» рядом с байтовыми строками.

+2

1. открыть файл, 2. написать, 3. ???, 4. Profit – JBernardo

+0

Что еще вы храните в файле? Является ли это бинарным или текстовым? – FatalError

+0

О, верно! Забыл, что я могу открыть файл в двоичном режиме! Я также хочу сохранить текст в этом файле. Было бы нормально открывать в двоичном режиме и записывать в него, а затем открывать в нормальном режиме и писать на него? Из моих тестов это работает, но, возможно, я кое-что упустил. – Kevin

ответ

3

Код типа:

>>> fh = open("e:\\test","wb") 
>>> fh.write(randomByteString) 
8 
>>> fh.close() 

Используйте файл в двоичном режиме. Кроме того, вы можете сделать это в лучшем образом, если операции с файлами, вблизи одного места (спасибо @Blender):

>>> with open("e:\\test","wb") as fh: 
     fh.write(randomByteString) 

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

>>> "test".encode() 
b'test' 
>>> fh.write("test".encode()) 

Здесь fh означает тот же самый дескриптор файла, который был открыт ранее.

+1

Вместо этого я бы использовал диспетчер контекста: 'with open (...) в качестве дескриптора:' – Blender

+0

@ Блендер ОК. Я буду обновлять кодировку в качестве ваших предложений. Благодаря! – Sheng

+0

О, верно! Забыл, что я могу открыть файл в двоичном режиме! – Kevin

0

Работает нормально. Вы не можете ожидать, что вывод будет иметь смысл.

>>> import os 
>>> with open("foo.txt", "wb") as fh: 
...  fh.write(os.urandom(8)) 
... 
>>> fh.close() 
>>> with open("foo.txt", "r") as fh: 
...  for line in fh.read(): 
...   print line 
... 
^J^JM-/ 
^O 
R 
M-9 
J 
~G 
Смежные вопросы