Python:在调用一次函数后,如果我再次调用它将打印0

时间:2016-10-18 16:01:41

标签: python python-3.x

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函数之后,下次调用它时它将返回0.我试着通过编写text_file2 = text_file [:]来复制text_file但是它返回了一个错误。

2 个答案:

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

基本上你正在读取整个文件,而不是重置指针所在的位置。关闭文件并重新打开会花费更多精力,或者使用参数seek()调用0函数。

基本上,read文件的来源与输入时文本文件中的光标类似。现在按住->键,直到你到达文件末尾。下次当你尝试阅读某些东西并且没有将光标设置回到开头时,它只会读取end of file符号并认为它是空的。

seek(0)告诉文件指针或光标(来自我们的示例)返回到开始。 seek()采用以字节为单位的参数转到该文件的字节,零作为开始。

答案 1 :(得分:0)

第一次调用data_mining()时,文件被读取,文件读取指针最终在文件末尾。在text_file.seek(0)开头调用data_mining将确保指针始终从文件的开头开始。