首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对文件中的列表进行排序,输出到另一个文件中

对文件中的列表进行排序,输出到另一个文件中
EN

Stack Overflow用户
提问于 2012-10-16 07:28:17
回答 2查看 162关注 0票数 0

我试图从csv文件中找出最小和最大值,并将其输出到文本文件中,目前我的代码将所有数据输出到输出文件中,而我不确定如何从多个列中提取数据并进行相应的排序。

任何指导将不胜感激,因为我没有一个很好的线索来解决这个问题

代码语言:javascript
代码运行次数:0
运行
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-16 08:14:16

假设您的文件是一个标准的.csv文件,其中只包含用分号分隔的数字:

代码语言:javascript
代码运行次数:0
运行
复制
1;5;7;6;
3;8;1;1;

然后,最简单的方法是使用str.split()命令,然后将类型转换为int。您可以将所有值存储在一个列表(或更快的: set)中,然后获取最大值:

代码语言:javascript
代码运行次数:0
运行
复制
valuelist=[]
for line_str in read_file:
     for cell in line_str.split(";"):
         valuelist.append(int(cell))
print(max(valuelist))
print(min(valuelist))

警告:如果您的文件包含非数字条目,则必须将其过滤掉。.csv-文件也可以有不同的分隔符。

票数 2
EN

Stack Overflow用户

发布于 2012-10-16 09:40:15

代码语言:javascript
代码运行次数:0
运行
复制
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.stdinsys.stdout。您可能会将这些替换为您在原始问题中创建的文件对象。(例如read_filewrite_file)

然而,在我的例子中,我可能只会用以下命令运行它(如果我使用的是linux):

代码语言:javascript
代码运行次数:0
运行
复制
$ ./foo.py <riskfactors.csv >best_and_worst.txt
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12905434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档