2013-05-13 25 views
17

Đây là những gì tôi biết làm thế nào để viết và lưu nóLàm thế nào để viết và lưu tệp html trong python?

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

Nhưng làm cách nào để lưu vào tập tin nếu tôi muốn viết một mã rất dài như thế này:

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

Ra quan tâm, những gì số là bạn mong đợi len (s) được? – Tom

+1

Có gì sai với 'html_file.write (% s '% (màu [j% len (màu)], k))' etc? – timss

+0

Ngoài ra, bạn đang trộn chuỗi "in" "' và 'in (" chuỗi ")'. Stick với một trong đó là mặc định trong phiên bản python bạn đang sử dụng. – timss

Trả lời

29

Bạn có thể tạo chuỗi nhiều dòng bằng cách đặt chúng trong dấu ngoặc kép. Vì vậy, bạn có thể lưu trữ HTML của bạn trong một chuỗi và thông qua đó chuỗi 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

Điều này sẽ chỉ hoạt động khi sử dụng chức năng in python 3, vì vậy bạn cần phải thêm 'từ __future__ import print_function' để sử dụng nó với mã python 2 được viết trong câu hỏi. –

+0

Thú vị! Đây có phải là cách tốt hơn 'file.write()' không? Ngay cả khi điều này có sẵn, bạn không nên gắn bó với cách "ưa thích", 'file.write()'? – timss

2

Bạn có thể thử:

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

Tôi không chắc cách 'file.write()' của Python tối ưu hóa, nhưng nó đánh tôi như một ý tưởng tồi để sử dụng nó mỗi khi bạn muốn nối thêm cái gì đó, và bạn nên lưu nó vào một danh sách (stack) trước khi thực hiện IO. Nói cách khác có một 'content = []' và làm 'content.extend (" ")' vv – timss

+0

Bạn có thể sử dụng [itertools.cycle] (http://docs.python.org/2/library/itertools.html#itertools.cycle) để đơn giản hóa việc chọn màu nền. ví dụ. tạo iterator bằng cách sử dụng 'color = itertools.cycle ([" red ", ...])' sau đó sử dụng 'next (color)' để lấy màu tiếp theo. –

+0

Điều này sẽ ghi một tệp dài một dòng vì không có đầu ra ngắt dòng ở bất kỳ đâu. Đó thực sự là mã dài ... – martineau

0

Bạn có thể làm điều đó bằng write():

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

Bạn cũng có thể làm được điều này mà không cần phải gọi số close() bằng cách sử dụng từ khóa with. Ví dụ:

# 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) 

Xem https://stackoverflow.com/a/11783672/2206251 để biết thêm chi tiết về with

Các vấn đề liên quan