2010-08-17 3 views
0

Я написал простую функцию для записи в текстовый файл. напримерPython - Запись в текстовый файл с использованием функций?

def write_func(var): 
     var = str(var) 
     myfile.write(var) 
a= 5 
b= 5 
c= a + b 
write_func(c) 

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

write_func("Output is :"+c) 

так, чтобы выход имел значащее имя в файле. как мне это сделать? и почему я не могу написать целое число в файл? i do, int = str (int) перед записью в файл?

ответ

2

Простой, вы делаете:

write_func('Output is' + str(c)) 

Вы должны преобразовать c в строку, прежде чем вы можете сцепить его с другой строкой. Затем вы также можете снять:

var = str(var) 

От вашей функции.


почему это я не могу написать целое в файл? i do, int = str (int) до Запись в файл?

Вы можете запись двоичных данных в файл, но байтовые представления чисел не очень читаемый человека. -2, например, составляет 0xfffffffe в 32-битном целочисленном дополнении. Это еще хуже, если число равно float: 2.1 - 0x40066666.

Если вы планируете иметь человеко-читаемый файл, вам понадобятся человекочитаемые символы. В ASCII-файле «0,5» не является числом (по крайней мере, не так, как компьютер понимает числа), а вместо символов '0', '.' and '5'. Вот почему вам нужно преобразовать свои номера в строки.

+1

Я не согласен с аргументом правдоподобия человека. Фактически 'str', который' write' принимает, является байтовой строкой. Это может быть 4-байтовое представление (short) int точно также (вы можете получить его с помощью модуля 'struct'). – Constantin

+0

@Constantin OK, вы предпочитаете '0x3F000000' или 0,5? – NullUserException

+1

Я думаю, что аргумент должен идти: Почему вы не можете написать целое число в файл? Поскольку 'write' принимает последовательность байтов. Если вам нужны двоичные данные, тогда дайте ему двоичные данные. Если вы хотите читать/ASCII/unicode (как хочет OP), тогда дайте ему печатные байты. Файлы содержат все, что вы указываете. : P –

3

Вы не можете добавить/конкатенировать строку и целое число напрямую.

Если вы делаете что-нибудь более сложное, чем "string :"+str(number), я бы настоятельно рекомендуем использовать string formatting:

write_func('Output is: %i' % (c)) 
1

От http://docs.python.org/library/stdtypes.html#file.write

file.write (ул)

Написать строку в файл. Возвратного значения нет. Из-за буферизации строка может фактически не отображаться в файле до тех пор, пока не вызывается метод flush() или close() .

Обратите внимание, что в документации указано, что аргумент write должен быть строкой.

Таким образом, вы должны создать строку самостоятельно, прежде чем передавать ее на file.write().

2

Python - это язык strongly typed. Это означает, среди прочего, что вы не можете конкатенировать строку и целое число. Поэтому вам нужно будет преобразовать целое число в строку перед конкатенацией. Это можно сделать с использованием строки формата (как Nick T suggested) или передачи целого числа во встроенную функцию str (как NullUserException suggested).

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