python - 将多行写入字符串中包含许多 %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 字符串,但是我在哪里放置格式部分?在每一行还是我可以把它放在外面?
解决方案
当您有要编写的预设行列表时,我看不到通过引入循环来增加复杂性的价值-您所需要的只是一种将日期注入模板的更简洁的方法,因此如下所示:
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的回答的评论)。
推荐阅读
- javascript - 无法在firestore中获得第三个子集合反应本机
- c# - 将复杂对象返回到视图
- mysql - Grafana 不读取日期时间列
- twitter - 当我已经在 Twitter 网络视图中时,如何让 https://twitter.com/intent/tweet?text= 正常工作而不让我再次登录
- node.js - Sails 响应 - json 对象键不按字母顺序
- sql-server - 如何在 vb.net 中将相同的数据插入到 2 个不同的表中
- swift - MGLSymbolStyleLayer 文本未显示
- javascript - 如何将 Vue 的 v-for 中的参数发送到函数?
- node.js - 如何使用Sharp库在NodeJs中创建缩略图?
- mql4 - 如何以编程方式获取手动绘制的矩形的上限值和下限值