2013-05-13 13 views
17

To, co wiem, jak napisać i zapisać goJak napisać i zapisać plik html w pythonie?

Html_file= open"(filename","w") 
Html_file.write() 
Html_file.close 

Ale jak mogę zapisać do pliku, jeśli chcę napisać naprawdę długich kodów tak:

1 <table border=1> 
    2  <tr> 
    3  <th>Number</th> 
    4  <th>Square</th> 
    5  </tr> 
    6  <indent> 
    7  <% for i in range(10): %> 
    8  <tr> 
    9  <td><%= i %></td> 
    10  <td><%= i**2 %></td> 
    11  </tr> 
    12 </indent> 
    13 </table> 
+0

Z odsetek, co numer Czekasz len (s) być? – Tom

+1

Co jest nie tak z 'html_file.write (% s '% (kolor [j% len (kolor)], k))' etc? – timss

+0

Dodajesz również "print" string "' i 'print (" string ")'. Trzymaj się tego, który jest domyślny w wersji pythonowej, której używasz. – timss

Odpowiedz

29

Możesz tworzyć wieloliniowe ciągi, ujmując je w potrójne cytaty. Więc można przechowywać HTML w ciąg i przekazać, że ciąg write():

html_str = """ 
<table border=1> 
    <tr> 
     <th>Number</th> 
     <th>Square</th> 
    </tr> 
    <indent> 
    <% for i in range(10): %> 
     <tr> 
     <td><%= i %></td> 
     <td><%= i**2 %></td> 
     </tr> 
    </indent> 
</table> 
""" 

Html_file= open("filename","w") 
Html_file.write(html_str) 
Html_file.close() 
2
print('<tr><td>%04d</td>' % (i+1), file=Html_file) 
+3

To będzie działać tylko przy użyciu funkcji drukowania python 3, więc musisz dodać 'from __future__ import print_function', aby użyć go z kodem python 2 zapisanym w pytaniu. –

+0

Interesujące! Czy jest to w jakikolwiek sposób lepsze niż 'file.write()'? Nawet jeśli jest to dostępne, czy nie należy trzymać się jednego "preferowanego" sposobu, 'file.write()'? – timss

2

Możesz wypróbować:

colour = ["red", "red", "green", "yellow"] 

with open('mypage.html', 'w') as myFile: 
    myFile.write('<html>') 
    myFile.write('<body>') 
    myFile.write('<table>') 

    s = '1234567890' 
    for i in range(0, len(s), 60): 
     myFile.write('<tr><td>%04d</td>' % (i+1)); 
    for j, k in enumerate(s[i:i+60]): 
     myFile.write('<td><font style="background-color:%s;">%s<font></td>' % (colour[j %len(colour)], k)); 


    myFile.write('</tr>') 
    myFile.write('</table>') 
    myFile.write('</body>') 
    myFile.write('</html>') 
+0

Nie jestem pewien, jak zoptymalizowane jest 'file.write()' w Pythonie, ale uważam, że jest to zły pomysł, aby go użyć za każdym razem, gdy chcesz coś dodać i że powinieneś prawdopodobnie zapisać go na liście (stos) przed wykonaniem OI. Innymi słowy, należy użyć 'content = []' i zrobić 'content.extend (" ")' itd. – timss

+0

Możesz użyć [itertools.cycle] (http://docs.python.org/2/library/itertools.html#itertools.cycle), aby uprościć wybór koloru tła. na przykład utwórz iterator za pomocą 'color = itertools.cycle ([" red ", ...])' następnie użyj 'next (color)', aby pobrać następny kolor. –

+0

Spowoduje to zapisanie pliku o długości jednej linii, ponieważ nigdzie nie ma żadnych wierszy podziału wierszy. To naprawdę długie kody ... – martineau

0

Można to zrobić za pomocą write():

#open file with *.html* extension to write html 
file= open("my.html","w") 
#write then close file 
file.write(html) 
file.close() 
0

Można też to zrobić bez konieczności dzwonienia pod numer close() za pomocą słowa kluczowego with. Na przykład:

# HTML String 
html = """ 
<table border=1> 
    <tr> 
     <th>Number</th> 
     <th>Square</th> 
    </tr> 
    <indent> 
    <% for i in range(10): %> 
     <tr> 
     <td><%= i %></td> 
     <td><%= i**2 %></td> 
     </tr> 
    </indent> 
</table> 
""" 

# Write to HTML to file.html 
with open("file.html", "w") as file: 
    file.write(html) 

Zobacz https://stackoverflow.com/a/11783672/2206251 więcej szczegółów na with

Powiązane problemy