需要为elif条件结果写入文件下一列的内容吗?

2024-09-29 05:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读一个文件,核对第二栏的数字。我已执行以下检查:

  • 数字小于0.20
  • 数字小于0.30
  • 数字小于0.40
  • 数字小于0.50

如果条件一为真,则将满足条件的值作为输出文件中的第一列写入。你知道吗

如果条件2为真,则将满足条件的列作为同一输出文件中的第二列写入。你知道吗

如果条件3为真,则将满足条件的值作为colunm3写入同一输出文件。你知道吗

如果条件4为真,则将满足条件的值作为colunm4写入同一输出文件。你知道吗

到目前为止,我的情况是:

  f = open('outfilename','r')
  d = open('newfile','w')
  lines = f.readlines()
  for line in lines:
  job = line.split()
  if(float(job[2]) < 0.20):
     d.write(str(job[2]))
     d.write('\n')
  elif(float(job[2]) < 0.30):
     d.write(str(job[2]))
     d.write('\n')
  elif(float(job[2]) < 0.40):
     d.write(str(job[2]))
     d.write('\n')
  elif(float(job[2]) < 0.50):
     d.write(str(job[2]))
     d.write('\n')

  d.close()
  f.close()

但我得到的结果是:

 0.061
 0.0
 0.012
 0.0
 0.079
 0.03
 0.109
 0.044
 0.019
 0.035
 0.018
 0.019
 0.004
 0.147
 0.111
 0.184
 0.121
 0.005
 0.299
 0.091
 0.077
 0.245
 0.345
 0.323
 0.456
 0.399
 0.499

有人能帮我找出我的代码有什么问题吗?你知道吗


Tags: 文件closeline情况job数字openfloat
2条回答

我想你应该做如下的事情:

f = open('outfilename','r')
d = open('newfile','w')
lines = f.readlines()
for line in lines:
job = float(line.split()[2])
if(job < 0.20):
   d.write(str(job) + "\t\t\t\n")
elif(job < 0.30):
   d.write("\t" + str(job) + "\t\t\n")
elif(job < 0.40):
   d.write("\t\t" + str(job) + "\t\n")
elif(job < 0.50):
   d.write("\t\t\t" + str(job) + "\n")

d.close()
f.close()

\t是制表符,它为上面每个未使用的列引入一个制表符空间

编辑:如果您想为所有列打印,如注释中所述,您将需要维护一个字符串

f = open('outfilename','r')
d = open('newfile','w')
lines = f.readlines()
for line in lines:
    job = float(line.split()[2])
    output = "
    output = output + str(job) +"\t" if job < .2 else output + "\t\t"
    output = output + str(job) +"\t" if job < .3 else output + "\t\t"
    output = output + str(job) +"\t" if job < .4 else output + "\t\t"
    output = output + str(job) +"\t" if job < .5 else output + "\t\t"
    d.write(output+"\n")
d.close()
f.close()

这是关于列处理的更明确的一点-您可以通过设置only_one来选择是将值写入所有限定列还是仅写入第一列

f = open('outfilename','r')
d = open('newfile','w')
limits = [0.2, 0.3, 0.4, 0.5]

only_first = True

for line in f:
    columns = ['' for l in limits]
    job = float(line.split()[2])
    for i, limit in enumerate(limits):
        if job < limit:
            columns[i] = str(job)
            if only_first: break
    d.write('\t'.join(columns) + '\n')

相关问题 更多 >