我试图找到csv文件的min和max,并将其输出到文本文件中,目前我的代码将所有数据输出到输出文件中,我不确定如何从中获取数据多列,并相应地进行排序。
任何指导都会受到赞赏,因为我没有很好的指导如何解决这个问题
read_file = open("riskfactors.csv", 'r')
def create_file():
read_file = open("riskfactors.csv", 'r')
write_file = open("best_and_worst.txt", "w")
for line_str in read_file:
read_file.readline()
print (line_str,file=write_file)
write_file.close()
read_file.close()
答案 0 :(得分:2)
假设您的文件是标准.csv文件,仅包含以分号分隔的数字:
1;5;7;6;
3;8;1;1;
然后最简单的方法是使用str.split()命令,然后将类型转换为int。 您可以将所有值存储在列表中(或更快:设置),然后获得最大值:
valuelist=[]
for line_str in read_file:
for cell in line_str.split(";"):
valuelist.append(int(cell))
print(max(valuelist))
print(min(valuelist))
警告:如果您的文件包含非数字条目,则必须将其过滤掉。 .csv文件也可以有不同的分隔符。
答案 1 :(得分:1)
import sys, csv
def cmp_risks(x, y):
# This assumes risk factors are prioritised by key columns 1, 3
# and that column 1 is numeric while column 3 is textual
return cmp(int(x[0]), int(y[0])) or cmp(x[2], y[2])
l = sorted(csv.reader(sys.stdin), cmp_risks))
# Write out the first and last rows
csv.writer(sys.stdout).writerows([l[0], l[len(l)-1]])
现在,我选择了一个快捷方式,并说输入和输出文件是sys.stdin
和sys.stdout
。您可能会将这些替换为您在原始问题中创建的文件对象。 (例如read_file
和write_file
)
但是,在我的情况下,我可能只是运行它(如果我使用的是linux):
$ ./foo.py <riskfactors.csv >best_and_worst.txt