1

我正在读取文件并检查第二列中的数字。我已执行以下检查:

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

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

如果条件二为真,则将满足条件的内容写入同一输出文件中的第二列。

如果条件三为真,则将满足条件的值作为 colunm3 写入同一输出文件中。

如果条件四为真,则将满足条件的值作为 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

有人可以帮我弄清楚我的代码有什么问题吗?

4

2 回答 2

0

我想你想做如下的事情:

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()
于 2013-08-28T05:13:58.227 回答
0

这对列处理更明确一些 - 您可以通过设置选择是将值写入所有符合条件的列还是仅写入第一个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')
于 2013-08-28T05:44:11.740 回答