2
f = open('day_temps.txt','w')
f.write("10.3,10.1,9.9,9.9,9.8,9.6,9.0,10.1,10.2,11.1")
f.close

def get_stats(file_name):
    temp_file = open(file_name,'r')
    temp_array = temp_file.read().split(',')
    number_array = []
    for value in temp_array:
        number_array.append(float(value))
    number_array.sort()
    max_value = number_array[-1]
    min_value = number_array[0]
    sum_value = 0
    for value in number_array:
        sum_value += value
    avg_value = sum_value / len(number_array)
    return min_value, max_value, avg_value

mini, maxi, mean = get_stats('day_temps.txt')
print "({0:.5}, {1:.5}, {2:.5})".format(mini, maxi, mean)

がなければfirst 3 line、コードは機能しtemp_fileます。

4

3 に答える 3

6

次のコード行でファイルを閉じたことはありません。

f.close

f.close()または、withファイル ハンドルを自動的に閉じて次のような問題を防ぐ構文を使用します。

with open('day_temps.txt', 'w') as handle:
    handle.write("10.3,10.1,9.9,9.9,9.8,9.6,9.0,10.1,10.2,11.1")

また、コードを大幅に圧縮できます。

with open('day_temps.txt', 'w') as handle:
    handle.write("10.3,10.1,9.9,9.9,9.8,9.6,9.0,10.1,10.2,11.1")

def get_stats(file_name):
    with open(file_name, 'r') as handle:
        numbers = map(float, handle.read().split(','))

    return min(numbers), max(numbers), sum(numbers) / len(numbers)

if __name__ == '__main__':
    stats = get_stats('day_temps.txt')
    print "({0:.5}, {1:.5}, {2:.5})".format(*stats)
于 2012-09-14T03:31:11.020 に答える
3

3 行目で、f.close は と読む必要がありますf.close()。(ファイルが閉じられたときではなく) すぐにファイルに書き込むように強制するには、f.flush()書き込み後に呼び出すことができます。詳細については。

または、スクリプトが完全に終了すると、ファイルは自然に閉じます (IDLE などの対話型インタープリター ウィンドウを閉じる場合も含む)。場合によっては、ファイルを適切にフラッシュまたは閉じるのを忘れると、コマンド ラインからスクリプトを実行した場合には見られない対話型セッションのバグなど、非常に紛らわしい動作につながる可能性があります。

于 2012-09-14T03:30:47.727 に答える
1

f.close は、メソッドを呼び出すのではなく、印刷のためにメソッド オブジェクトを呼び出すだけです。REPL では、次のようになります。

f.close
<built-in method close of file object at 0x00000000027B1ED0>

メソッド呼び出しブラケットを追加します。

于 2012-09-14T04:08:10.203 に答える