0

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

2 に答える 2

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ファイルには異なる区切り文字を含めることもできます。

于 2012-10-16T00:14:15.893 に答える
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_filewrite_file

ただし、私の場合は、おそらく次のコマンドで実行します(Linuxを使用している場合)。

$ ./foo.py <riskfactors.csv >best_and_worst.txt
于 2012-10-16T01:40:14.653 に答える