簡體   English   中英

從文件排序列表,在另一個文件中輸出

[英]Sorting a list from a file, outputting in another file

我正在嘗試從csv文件中找到最小值和最大值,並將其輸出到文本文件中,當前我的代碼將所有數據輸出到輸出文件中,並且我不確定如何從多列中獲取數據並對其進行相應的排序。

任何指導將不勝感激,因為我對如何解決這個問題沒有很好的領導

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()

假設您的文件是標准的.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文件也可以具有不同的定界符。

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):

$ ./foo.py <riskfactors.csv >best_and_worst.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM