首页 > 解决方案 > 将多行写入字符串中包含许多 %s 的文本文件

问题描述

我正在尝试将多行写入文本文件,但每行包含许多日期。

代码如下所示:

directory = 'C:\SPAN'
with open(os.path.join(directory, 'SPANscript.txt'), 'w') as OPATH:
    OPATH.writelines([r'Load C:\SPAN\RiskFiles\%s\SGX.%s.s.pa2'% (rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y%m%d")),
                      r'Load C:\SPAN\RiskFiles\%s\cfe.%s.s.pa2'% (rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y%m%d")), 
                      r'Load C:\SPAN\RiskFiles\%s\cme.%s.s.pa2'% (rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y%m%d")), 
                      r'Load C:\SPAN\RiskFiles\%s\hkex.%s.s.pa2'% (rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y%m%d")),
                      r'Load C:\SPAN\RiskFiles\%s\Jsc%s_1700.pa2'% (rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y%m%d")), 
                      r'Load C:\SPAN\Positions\%s\CME_Span_pos_%s.pos'% (rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y-%m-%d")),
                      r'Load C:\SPAN\Positions\%s\HKFE_Span_pos_%s.pos'% (rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y-%m-%d")),
                      r'Load C:\SPAN\Positions\%s\OSE_Span_pos_%s.pos'% (rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y-%m-%d")),
                      r'Load C:\SPAN\Positions\%s\SGX_Span_pos_%s.pos'% (rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y-%m-%d")),
                      r'Load C:\SPAN\Positions\%s\XCME_Span_pos_%s.pos'% (rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y-%m-%d")),
                      r'Load C:\SPAN\Positions\%s\XNYM_Span_pos_%s.pos'% (rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y-%m-%d")),
                      'Calc',
                      r'SaveCalcSummary C:\SPAN\Reports\%s\%s.csv' %(rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y%m%d")),
                      r'Save C:\SPAN\Reports\%s\%s.xml' %(rundate.strftime("%Y-%m-%d"),rundate.strftime("%Y%m%d")),
                      r'LogSave C:\SPAN\Reports\%s\logtest.txt'%rundate.strftime("%Y-%m-%d")])

我想让它更整洁。看到这篇文章:Python - 多个 %s 字符串,但是我在哪里放置格式部分?在每一行还是我可以把它放在外面?

标签: python

解决方案


当您有要编写的预设行列表时,我看不到通过引入循环来增加复杂性的价值-您所需要的只是一种将日期注入模板的更简洁的方法,因此如下所示:

directory = r'C:\SPAN'
date = rundate.strftime('%Y-%m-%d')

with open(os.path.join(directory, 'SPANscript.txt'), 'w') as f:
    f.write(r'Load C:\SPAN\RiskFiles\{d}\SGX.{d}.s.pa2' '\n'
            r'Load C:\SPAN\RiskFiles\{d}\cfe.{d}.s.pa2' '\n'
            r'Load C:\SPAN\RiskFiles\{d}\cfe.{d}.s.pa2' '\n'
            r'Load C:\SPAN\RiskFiles\{d}\cme.{d}.s.pa2' '\n'
            r'Load C:\SPAN\RiskFiles\{d}\hkex.{d}.s.pa2' '\n'
            r'Load C:\SPAN\RiskFiles\{d}\Jsc{d}_1700.pa2' '\n'
            r'Load C:\SPAN\Positions\{d}\CME_Span_pos_{d}.pos' '\n'
            r'Load C:\SPAN\Positions\{d}\HKFE_Span_pos_{d}.pos' '\n'
            r'Load C:\SPAN\Positions\{d}\OSE_Span_pos_{d}.pos' '\n'
            r'Load C:\SPAN\Positions\{d}\SGX_Span_pos_{d}.pos' '\n'
            r'Load C:\SPAN\Positions\{d}\XCME_Span_pos_{d}.pos' '\n'
            r'Load C:\SPAN\Positions\{d}\XNYM_Span_pos_{d}.pos' '\n'
            'Calc\n'
            r'SaveCalcSummary C:\SPAN\Reports\{d}\{d}.csv' '\n'
            r'Save C:\SPAN\Reports\{d}\{d}.xml' '\n'
            r'LogSave C:\SPAN\Reports\{d}\logtest.txt'.format(d=date))

应该绰绰有余,而且它会正确处理换行符file.writelines()(请参阅我对@Tomothy32回答的评论)。


推荐阅读