从Python 2.7移植到2.4.3

-1 投票
3 回答
897 浏览
提问于 2025-04-17 23:17

我现在的情况是不能使用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")

所以,你需要做两个改动:

  1. LINE里的占位符从{}改成%,变成这样:LINE = "%s: %s"
  2. .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'

撰写回答