Convert list to file object without creating an actual file.

Bart Kastermans bkasterm at gmail.com
Fri Jan 25 09:03:24 EST 2008


The suggestion to use StringIO to make a string have the same
interface
as a file works perfect in my situation.  Here is now the working
result
(just in case it is useful to anyone) part of this is still a definite
hack and suggestions for improvement are certainly appreciated.

Want:
have an easily maintainable file containing homework assignments, but
have it nicely formatted on my webpage.

Solution:
have a file with due dates and assignments as follows:

Mon Jan 28
   1.1: 1,2,3

(at this point only the indentation is taken into account).

Then use the following script (setting some variables and server,
login, and passwd for the ftp connection):

#!/usr/bin/env python

homeworktxt = "homework.txt"
homeworkhtml = []

import sys
import ftplib
import StringIO

Indent = '  '
StartTable = '<table border="1" width="100%"><tr><td>Due</
td><td>Assignment</td></tr>\n<tr>'
EndTable = '</table>'
StartTitle = Indent + '<tr>\n' + Indent + Indent +'<td valign="top">'
EndTitle = Indent + Indent + '</td>\n' + Indent + Indent + '<td>'
BeforeItems = Indent + Indent + Indent + '<table>'
AfterItems = Indent + Indent + Indent + '</table>\n'  + Indent +
Indent + '</td>\n' + Indent + '</tr>'
StartItem = Indent + Indent + Indent + Indent + '<tr><td>'
EndItem = Indent + Indent + Indent + Indent + '</td></tr>'


#if 1 >=len (sys.argv):
#    print "Need an filename as an argument"
#    print sys.argv[0] + " <filename>"
#else:

hw = open (homeworktxt).readlines()

Last = 0    # 0: at the start, 1: just printed an item, 2: just
printed a title

#print StartTable
homeworkhtml.append(StartTable)

for x in hw:
	if ' ' == x[0]:
	    if 2 == Last:
		homeworkhtml.append(BeforeItems)
	    homeworkhtml.append(StartItem)
	    homeworkhtml.append(Indent + Indent + Indent + Indent + Indent +
x.strip())
	    homeworkhtml.append(EndItem)
	    Last = 1
	elif '#' != x[0]:
	    if 1 == Last:
		homeworkhtml.append(AfterItems)
	    homeworkhtml.append(StartTitle)
	    homeworkhtml.append(Indent + Indent + Indent + x.strip())
	    homeworkhtml.append(EndTitle)
	    Last = 2
	# else :
	#     homeworkhtml.append('COMMENT')
	#     homeworkhtm

if 1 == Last:
	homeworkhtml.append(AfterItems)

homeworkhtml.append(EndTable)

for i in range(0,len(homeworkhtml)):
	homeworkhtml[i] = homeworkhtml[i] + '\n'

homeworkhtmlfile = StringIO.StringIO()
homeworkhtmlfile.writelines(homeworkhtml)
homeworkhtmlfile.seek(0)

# open connection to the server
ftp = ftplib.FTP('server', 'login', 'password' )

# go to location of root of website on server
ftp.cwd('httpdocs')

# put the contends of a file
filename = "test.html"

ftp.storlines("STOR " + filename, homeworkhtmlfile)

# quite the connection
ftp.quit()



This will result in an html file that you can include (say with
php include) into a webpage displaying a table.  Examples of the
result are currently on my webpage (www.bartk.nl/teach.php ) (if
you read this much later look on the waybackmachine).


Again, thanks for the suggestions,

Best,
Bart

PS: apologies for the mixing of spaces and tabs.  I had a computer
crash and have not yet corrected the settings.  So this is a
combination of default behavior and my preferred settings.



More information about the Python-list mailing list