我有两列的编号,我想比较一下。 然后输出文件在第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栏)。
任何人都可以提供帮助?否则更好的方法呢?
谢谢!
答案 0 :(得分:0)
我相信你的问题是数组中的值被视为字符串而不是整数。我建议你将每个值转换为一个整数(或任何数字格式是适当的),然后进行比较。
例如,1015可能是一个大于945的数字,但是1按字母顺序小于9,所以1015总是会显示为较小的值,除非您将它们作为数字进行比较。
答案 1 :(得分:0)
你的代码中的主要错误是你没有比较数字,而是字符串,所以" 2"大于" 10"。
我还有其他一些评论:
file
作为变量名,因为它是保留名称。以下是我提出的解决方案:
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)))