Как использовать библиотеку Python io для записи во внешний файл - PullRequest
3 голосов
/ 04 февраля 2011

В настоящее время я использую библиотеку Python io для записи во внешний файл.Ниже приведен пример кода, который я пытаюсь выполнить:

import io
output=io.StringIO
output.write('\n Hello world ')
output.close()
print output.getvalue() 

, когда я запускаю этот кусок кода, я получаю ошибку.Может ли кто-нибудь сказать мне, где я иду не так и какова причина ошибки.

Ответы [ 4 ]

6 голосов
/ 04 февраля 2011

StringIO для записи в строки, обработки их как потоков в памяти.

Если вы хотите записать в файл, сделайте следующее:

f = open('yourfile', 'w')
f.write('Hello, world.')
f.close()

Нет необходимости использоватьStringIO для этого.

Вы даже не получили экземпляр класса, потому что нет скобок () после StringIO, поэтому ваша переменная указала на класс StringIO, а яЯ совершенно уверен, что это не то, что вы хотели сделать.

2 голосов
/ 04 февраля 2011

Я согласен с @Andrea. Однако, если вам нужно сделать это по-своему:

import cStringIO
output=cStringIO.StringIO()

output.write('\n Hello world ')

print output.getvalue()
output.close()
1 голос
/ 04 февраля 2011

Существует множество вариантов использования StringIO, например, его можно использовать вместо изменяемой строки.Однако, поскольку ваша цель - записать в файл, вы должны пропустить его и просто перейти к файлу:

with open('file/path', 'w') as fh:
    fh.write('Hello World!')

print open('file/path').read() # if you need to actually print it out.
0 голосов
/ 05 февраля 2011

Этот бит кода имеет различные проблемы.

Сначала вы назначили класс out вместо экземпляра.Вместо этого попробуйте out = io.StringIO().

Во-вторых, если вы не используете Python v3, метод write будет жаловаться, что вы используете acsii вместо unicode.

В-третьих, вы пытаетесь читать послезакрыли это.Как сказал Мартино, StringIO не позволяет получать выходные данные после вызова close.Немного сбивает с толку, если вы пришли из фона Java, где close в соответствующем классе (StringWriter) не имеет никакого эффекта.

Наконец, StringIO выполняет запись в память, а не в файл.Используйте out = open(filename,'w'), если хотите записать в файл.

Так что, не зная точную ошибку, которую вы получили, это все, что я получил.Публикация полученной ошибки обычно очень полезна.

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