比较两列的数字和输出结果

时间:2015-11-12 22:02:40

标签: python python-2.7 csv

我有两列的编号,我想比较一下。 然后输出文件在第2列中较小,在第1列中较大。

例如,下面是我的XX.csv文件。

C1,C2

1015,945

1028,958

1901,1966

10016,9946

133203

5292,5362

299369

457527

file = open ('input.csv','rb')
fi = file.readlines()
new_collect = []
final = []

for row in fi:
    row_new = row.rstrip().split(',')    

    if row_new[1] > row_new[2]:
        new_collect =  row_new[2] + ',' + row_new[1]
        final.append(new_collect)

    elif row_new[2] > row_new[1]:
        new_collect = row_new[2] + ',' + row_new[1]
        final.append(new_collect)

fo =  open('output.csv', 'wb')
fo.write('\n'.join(final)+'\n')
fo.close()

但我的结果不正确。结果不一致(第1栏>第2栏)。

任何人都可以提供帮助?否则更好的方法呢?

谢谢!

2 个答案:

答案 0 :(得分:0)

我相信你的问题是数组中的值被视为字符串而不是整数。我建议你将每个值转换为一个整数(或任何数字格式是适当的),然后进行比较。

例如,1015可能是一个大于945的数字,但是1按字母顺序小于9,所以1015总是会显示为较小的值,除非您将它们作为数字进行比较。

答案 1 :(得分:0)

你的代码中的主要错误是你没有比较数字,而是字符串,所以" 2"大于" 10"。

我还有其他一些评论:

  • 避免使用file作为变量名,因为它是保留名称。
  • 您可以使用" for"声明一个文件对象一次处理一行
  • 访问文本文件时应避免使用二进制模式
  • 使用"使用"确保文件正确关闭的语句

以下是我提出的解决方案:

with open('input.csv', 'r') as ifile:
    with open('output.csv', 'w') as ofile:
        for line in ifile:
            try:
                c1, c2 = [int(val.strip()) for val in line.split(',', 1)]
            except ValueError:
                # skip malformed lines
                continue
            ofile.write("%s,%s\n" % (
                (c1, c2) if c1 > c2 else (c2, c1)))