我正在尝试向文本文件中写很多行,但是每行包含很多日期。
代码如下:
public void onCheckboxClicked(View view) {
boolean checked = ((CheckBox) view).isChecked();
switch(view.getId()) {
case R.id.chk1:
if (checked)
{System.out.println("if Part);}
else
{System.out.println("Else Part);}
break;
Perform your logic
}
}
我想使其更整洁。看到了这篇文章:Python - multiple %s string,但是我应该将格式部分放在哪里?每行还是我可以把它放在外面?
答案 0 :(得分:0)
我建议使用str.format
而不是旧格式。
directory = r'C:\SPAN'
names = [
r'Load C:\SPAN\RiskFiles\%s\SGX.%s.s.pa2',
r'Load C:\SPAN\RiskFiles\%s\cfe.%s.s.pa2',
r'Load C:\SPAN\RiskFiles\%s\cme.%s.s.pa2',
r'Load C:\SPAN\RiskFiles\%s\hkex.%s.s.pa2',
r'Load C:\SPAN\RiskFiles\%s\Jsc%s_1700.pa2',
r'Load C:\SPAN\Positions\%s\CME_Span_pos_%s.pos',
r'Load C:\SPAN\Positions\%s\HKFE_Span_pos_%s.pos',
r'Load C:\SPAN\Positions\%s\OSE_Span_pos_%s.pos',
r'Load C:\SPAN\Positions\%s\SGX_Span_pos_%s.pos',
r'Load C:\SPAN\Positions\%s\XCME_Span_pos_%s.pos',
r'Load C:\SPAN\Positions\%s\XNYM_Span_pos_%s.pos',
'Calc',
r'SaveCalcSummary C:\SPAN\Reports\%s\%s.csv',
r'Save C:\SPAN\Reports\%s\%s.xml',
r'LogSave C:\SPAN\Reports\%s\logtest.txt'
]
with open(os.path.join(directory, 'SPANscript.txt'), 'w') as OPATH:
OPATH.writelines(name.replace('%s', '{0}').format(rundate.strftime("%Y-%m-%d")) for name in names)
当然,如果您可以手动将文件名修改为具有{0}
而不是%s
,则可以放弃.replace('%s', '{0}')
。
答案 1 :(得分:0)
您可以在此处使用列表理解。例如
...
lines = [
r'Load C:\SPAN\RiskFiles\%s\SGX.%s.s.pa2',
r'Load C:\SPAN\RiskFiles\%s\cfe.%s.s.pa2',
...]
formatted_date = rundate.strftime("%Y-%m-%d")
OPATH.writelines([line % (formatted_date, formatted_date) for line in lines])
按照@ Tomothy32的建议,切换到较新的字符串格式方法也是一个好主意。
答案 2 :(得分:0)
当您有要写入的行的预设列表时,我看不到通过引入循环来增加复杂性的价值-您所需要的只是将日期注入到 template 中的一种更整洁的方式,因此像这样的东西:
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的answer的评论)。