Steven D'Aprano wrote: > On Sun, 11 Nov 2007 11:22:19 +0100, Florian Lindner wrote: > >> Hello, >> I have a piece of code like that: >> >> for row in resultSet: >> logs += "/home/%s/%s/log/access.log \n" % (row[1], row[0]) >> logs += "/home/%s/%s/log/error.log \n" % (row[1], row[0]) # <-- >> >> Now I want to avoid the newline at the last iteration and only at the >> second line. > > That means your log file doesn't end with a newline. That's often not > good, because it can confuse some tools. > > Also, appending lots of strings together like that is very inefficient. > >> How to do that most elegantly with Python? > > If you have a small number of rows (say, less than a few tens of > thousands), you can do this: > > rows = [] > for row in resultSet: > rows.append("/home/%s/%s/log/access.log" % (row[1], row[0])) > rows.append("/home/%s/%s/log/error.log" % (row[1], row[0])) > # note that there are no newlines > logs = '\n'.join(rows) # do it once at the end > > But again, when you write text to a file, you should end it with a > newline. It isn't compulsory, but it is best practice. > > Alternatively, check out the logging module.
That is not log file it's a config file for logrotate. And the log string goes into a template therefore the config file ends with a newline. The problem is that logrotate gets confused by empty lines between logfile path and config. The number of lines will always be < 100 and so config will only be regenerated not often so efficiency is not issue. Regards, Florian -- http://mail.python.org/mailman/listinfo/python-list