从Python 2.7移植到2.4.3
我现在的情况是不能使用python 2.7,只能用2.4.3。我最开始是想用str.format这个方法,但现在我尝试用%符号来进行版本兼容。
原来的2.7代码:
LINE = "{:<6} {:34} {:18} {:10} {:10} {:10} {:10} {:10}\n"
def main():
with open(OUTPUT, "w") as outf:
outf.write(LINE.format("SysNum", "Job Name", "Target Machiene", "Status", "Start Date", "Start Time", "End Date", "End Time"))
for result in parse_jobfile(INPUT):
outf.write(LINE.format(*result))
需要兼容到2.4.3的代码:
LINE = "{:<6} {:34} {:18} {:10} {:10} {:10} {:10} {:10}\n"
def main():
outf = open(OUTPUT, "w")
outf.write(LINE.'%s, %s,%s, %s,%s, %s,%s, %s,' % ("SysNum", "Job Name", "Target Machiene", "Status", "Start Date", "Start Time", "End Date", "End Time"))
for result in parse_jobfile(INPUT):
outf.write(LINE.'%s'(*result))
但是不知为什么,我还是遇到了错误:
outf.write(LINE.'%s, %s,%s, %s,%s, %s,%s, %s,' % ("SysNum", "Job Name", "Target Machiene", "Status", "Start Date", "Start Time", "End Date", "End Time"))
^
SyntaxError: invalid syntax
我漏掉了什么吗?
3 个回答
1
你需要这样定义 LINE
(可以参考字符串格式化的文档):
LINE = "%6s %-34s %-18s %-10s %-10s %-10s %-10s %-10s\n"
现在你可以使用
def main():
outf = open(OUTPUT, "w")
outf.write(LINE % ("SysNum", "Job Name", "Target Machiene", "Status", "Start Date", "Start Time", "End Date", "End Time"))
for result in parse_jobfile(INPUT):
outf.write(LINE % (*result))
3
假设你之前有一个模板:
LINE = "{0}: {1}"
然后你在里面放了一些内容:
LINE.format("foo", "bar")
所以,你需要做两个改动:
- 把
LINE
里的占位符从{}
改成%
,变成这样:LINE = "%s: %s"
; - 把
.format
替换成%
,变成这样:LINE % ("foo", "bar")
在你现在的版本中,LINE."%s"
根本没有意义。
5
你的问题是你没有完全转换语法:
outf.write(LINE.'%s, %s,%s, %s,%s, %s,%s, %s,' % ("SysNum", "Job Name", "Target Machiene", "Status", "Start Date", "Start Time", "End Date", "End Time"))
^
SyntaxError: invalid syntax
你想要的是:
outf.write(LINE % ("SysNum", "Job Name", "Target Machiene", "Status", "Start Date", "Start Time", "End Date", "End Time"))
现在,要完全格式化这一行,你需要把新式格式转换成:
LINE = "{:<6} {:34} {:18} {:10} {:10} {:10} {:10} {:10}\n"
相应的旧式格式:
LINE = '%-6s %-34s %-18s %-10s %-10s %-10s %-10s %-10s\n'