2014-11-25 3 views
0

В Python 3 вы можете использовать функцию печати для записи данных в файл (например, print('my data', file=my_open_file).Это хорошо и хорошо (и очень круто). Но можете ли вы print на (? строка) переменная Если да, то какPython 3 print() для переменной

в моем конкретном случае использования, я пытаюсь не писать данные в TempFile на диске просто включить и прочитать, что временный файл

Edit:?. I 'm не может просто назначить, потому что мои исходные данные не являются строкой, а скорее являются частью дерева документов html, как извлечено BeautifulSoup. После того, как я извлечу дерево документа, я буду обрабатывать его по строкам.


Мой код: (работает сейчас)

with open("index.html", "r") as soup_file: 
    soup = BeautifulSoup(soup_file) 
THE_BODY = soup.find('body') 
not_file = io.StringIO() 
print(THE_BODY, file = not_file) # dump the contents of the <body> tag into a file-like stream 
with codecs.open('header.js', "w", "utf-8") as HEADER_JS: 
    for line in not_file2.getvalue().split('\n'): 
     print("headerblock += '{}'".format(line), file = HEADER_JS) 

Лучше, Рабочий код:

with open("index.html", "r") as soup_file: 
    soup = BeautifulSoup(soup_file) 
with codecs.open('header.js', "w", "utf-8") as HEADER_JS: 
    for line in str(soup.find('body')).split('\n'): 
     print("headerblock += '{}'".format(line), file = HEADER_JS) 
+4

Почему бы вам не просто назначить вместо этого? –

+0

@ IgnacioVazquez-Abrams Возможно, вы хотите, чтобы co захватил вывод функции в строку, которая печатает в файл. – SethMMorton

+1

Я смущен относительно того, какая разница между печатью в строку и просто назначением строки. Разве конечный результат не одинаковый в обоих случаях? – csmckelvey

ответ

2

ОБНОВЛЕНО РЕАКЦИЯ НА ОСНОВЕ Обновлено ВОПРОСА

Если все, что вам нужно сделать, это преобразовать ваш объект в виде строки, просто вызовите функцию str на переменную ... это то, что print делает внутренне.

a = str(soup.find('body')) 

Вызов print делает целую кучу других вещей, которые вам не нужны, если все, что вам нужно, это строковое представление.


ORIGINAL РЕАКЦИЯ

Вы можете использовать io.StringIO.

import io 
f = io.StringIO() 
print('my data', file=f) 

# to get the value back 
a = f.getvalue() 
print(a) 
f.close() 

Обратите внимание, что на python2 это находится под StringIO.StringIO.

Это решение подходит для тех случаев, когда у вас есть уже существующий код, который хочет печатать в файл, но вы предпочтете захватить этот вывод в переменной.

+0

Мне нравится этот подход, но это изменяет «блок хранения» от строк до символов. Поэтому см. Выше, как я это сделал :) – MinchinWeb

+0

Насколько я ценю репутацию, теперь, когда я вижу, что вы делаете, я должен согласиться с остальными, что просто назначение переменной является гораздо более простым решением. Я предположил, что вам нужно это по более сложной причине. – SethMMorton

+1

Вы могли бы сделать 'a = str (soup.find ('body'))'. 'print' просто вызывает' str' внутренне. – SethMMorton

Смежные вопросы