2016-10-18 6 views
1
def data_mining (text_file, start, end): 
    count = 0 
    total_value = 0 
    average = 0 
    for file_line_number, line in enumerate(text_file): 
     if (file_line_number % 2) == 0: 
      value = line[start:end] 
      value = int(value) 
      total_value += value 
      count += 1 
    return total_value, count 


def main(): 
    #Main program. 
    text_file = open("93cars.dat.txt", "r") 

    city_mpg = data_mining(text_file, 52, 54) 
    highway_mpg = data_mining(text_file, 55, 57) 
    midrange_price = data_mining(text_file, 42, 44) 

    print (city_mpg) 
    print (highway_mpg) 
    print (midrange_price) 

main() 

私はテキストでデータマイニングをしようとしていますが、data_mining関数を呼び出した後、私はtext_file2 = text_file [:]を記述してtext_fileのコピーを作成しようとしましたが、エラーを返しました。Python:関数が一度呼び出された後、私が再び呼び出すと、0を出力します。

答えて

1
def data_mining (text_file, start, end): 
    count = 0 
    total_value = 0 
    average = 0 
    for file_line_number, line in enumerate(text_file): 
     if (file_line_number % 2) == 0: 
      value = line[start:end] 
      value = int(value) 
      total_value += value 
      count += 1 
    return total_value, count 


def main(): 
    #Main program. 
    text_file = open("93cars.dat.txt", "r") 
    city_mpg = data_mining(text_file, 52, 54) 
    text_file.seek(0) #reset the file pointer to 0 
    highway_mpg = data_mining(text_file, 55, 57) 
    text_file.seek(0) #reset the file pointer to 0 
    midrange_price = data_mining(text_file, 42, 44) 

    print (city_mpg) 
    print (highway_mpg) 
    print (midrange_price) 

main() 

基本的には、ファイル全体を読み取っていて、ポインタの位置をリセットしていません。ファイルを閉じてもう一度開くと、0seek()関数が呼び出されます。

どのようにファイルがreadからであるかは、入力時にテキストファイル内のカーソルのようなものです。ファイルの最後に来るまで->キーを押し続けます。次に何かを読み込もうとしたときに、カーソルを最初に戻さなかった場合は、記号end of fileが読み込まれ、空であると考えられます。

seek(0)は、ファイルのポインタまたはカーソル(この例では)を先頭に戻すように指示します。 seek()は、そのファイルのバイトに行くためにバイト単位のパラメータを取ります。先頭はゼロです。

0

data_mining()を初めて呼び出すとファイルが読み込まれ、ファイルの読み込みポインタはファイルの最後で終了します。 text_file.seek(0)data_miningの冒頭に呼び出すと、ポインタは常にファイルの先頭から開始されます。

関連する問題