2012-06-22 9 views
7

jestem generowania niektóre numery (powiedzmy, num) i pisanie liczb do pliku wyjściowego za pomocą outf.write(num).
Ale kompilator rzuca błąd:pisanie wartości całkowitych do pliku przy użyciu out.write()

"outf.write(num) 
TypeError: argument 1 must be string or read-only character buffer, not int". 

Jak mogę rozwiązać ten problem?

+2

się .write (str (num)) – joaquin

+3

Naucz się czytać komunikaty o błędach! "Argument musi być ciągiem, a nie int" –

+1

Czy zamieściłbyś deklarację wyjścia? – octopusgrabbus

Odpowiedz

15

write() zajmuje tylko pojedynczy łańcuch argumentu, więc można to zrobić:

outf.write(str(num)) 

lub

outf.write('{}'.format(num)) # more "modern" 
outf.write('%d' % num)  # deprecated mostly 

Należy również pamiętać, że write nie dołączy do nowej linii do produkcji, więc jeśli potrzebujesz go, musisz to dostarczyć samemu.

Poza:

Korzystanie formatowanie ciąg nie daje większą kontrolę nad swoim wyjściu, więc na przykład można napisać (oba te są równoważne):

num = 7 
outf.write('{:03d}\n'.format(num)) 

num = 12 
outf.write('%03d\n' % num)   

dostać trzy przestrzenie, z wiodącymi zerami do swojej wartości całkowitej następnie przez nową linię:

007 
012 

format() w choruj przez długi czas, więc warto się uczyć/wiedzieć.

+0

Czy "format()" nie wymaga parametru krotki? – JAB

+0

+1 do ciągłego ulepszania – joaquin

+0

Nie martw się, wpadłem w zakłopotanie. To użycie '%' wymaga krotki dla więcej niż jednego parametru, a nie 'formatu()'. – JAB

2

każdy z nich powinien działać

outf.write("%s" % num) 

outf.write(str(num)) 

print >> outf, num 
+0

A dwa z nich są przestarzałe. –

+0

@BlaXpirit Półtora, ponieważ format% będzie tu długo – joaquin

0
i = Your_int_value 

wartość bajtów pisać jak to na przykład:

the_file.write(i.to_bytes(2,"little")) 

Depend was int rozmiar wartość i kolejność bitów swój wolą

Powiązane problemy