处理'str'对象在函数中没有属性'read'

时间:2019-02-20 16:43:27

标签: python-3.x function

在处理“ AttributeError”时遇到编程问题。我得到了一个打开的文件,需要首先创建所有单词的列表(假设它们的数字),然后找到一个年份,然后是12个数字,但是在我的一个函数中不断出现此错误。我认为我在读取文件或在函数之间传输信息时做错了。

这是我的主要功能:

# process_rainfall_data_w_functions.py
# Instructor-supplied driver for the rainfall_data_functions module.

import sys
import rainfall_data_functions


def main():
    """
    The main driver function for the functions in the module
    rainfall_data_functions.py.
    """
    if len(sys.argv) == 1:
        rainfall_data_functions.display_opening_screen()
        rainfall_data_functions.display_program_info()
        sys.exit()


    f = open(sys.argv[1])
    rainfall_data_functions.process_rainfall_file(f)
    f.close()
    print("\nOK ... Program now terminating.")
    input("Press Enter to continue ... ")

    main()

和我的功能:

def process_rainfall_file(f):
    numbers = list(f.read().split())
    year = input('Enter year for which you want rainfall data: ')
    rain_nums, rain_dict = process_data(year, numbers)
    read_information(rain_nums, rain_dict, year)

def year_input():
    # asks user for year
    year = input('Enter year for which you want rainfall data: ')
    return year

def process_data(year, numbers):
    # finds index of matching year in text list
    year_index = numbers.index(year)
    # creates two lists for processing values
    rain_string = []
    rain_nums = []
    # collects the twelve values after year in list number
    for i in range(year_index, year_index + 12):
        rain_string.append(numbers[i+1])
    # changes the twelve strings into float values
    for i in rain_string:
        rain_nums.append(float(i))
    # create list with twelve months
    months_of_year = ['January', 'February', 'March', 'April', 'May',
                      'June', 'July', 'Augest', 'September', 'October',
                      'November', 'December']
    # creates dict with months and rain values matched up
    rain_dict = dict(zip(months_of_year, rain_nums))
    # returns the list and dict
    return rain_nums, rain_dict

def read_information(rain_nums, rain_dict, year):
    # prints first text box with rain values
    print('\n===== Rainfall summary for {}'.format(year), end='')
    print("""
January..... {[0]:4.1f}  July........ {[6]:4.1f}
February.... {[1]:4.1f}  August...... {[7]:4.1f}
March....... {[2]:4.1f}  September... {[8]:4.1f}
April....... {[3]:4.1f}  October..... {[9]:4.1f}
May......... {[4]:4.1f}  November.... {[10]:4.1f}
June........ {[5]:4.1f}  December.... {[11]:4.1f}"""
           .format(rain_nums, rain_nums, rain_nums, rain_nums, rain_nums,
                  rain_nums, rain_nums, rain_nums, rain_nums, rain_nums,
                  rain_nums, rain_nums), end='')
    # find total of all float rain values under total_rain
    total_rain = 0
    for i in range(12):
        total_rain += float(rain_nums[i])
    # finds average rain
    avg_rain = total_rain/len(rain_nums)
    # finds max rain value and matches it with its month in dict
    max_month = max(rain_dict, key=rain_dict.get)
    # finds min rain value and matches it with its month in dict
    min_month = min(rain_dict, key=rain_dict.get)
    # prints second text box after calculations
    print("""
===== Total rainfall for the year... {:<7}
===== Average monthly rainfall...... {:<7}
===== Month with highest rainfall... {:<7}
===== Month with lowest rainfall.... {:<7}"""
          .format(round(total_rain, 1),
                  round(avg_rain, 1), max_month, min_month))
# pause
input('Press Enter to continue ...')

据说此函数中发生错误:

J:\*******\*******\rainfall_data_functions.py in process_rainfall_file(f)
     46 def process_rainfall_file(f):
     47     numbers = list(f.split())
---> 48     year = input('Enter year for which you want rainfall data: ')
     49     rain_nums, rain_dict = process_data(year, numbers)
     50     read_information(rain_nums, rain_dict, year)

AttributeError: 'str' object has no attribute 'read'

p.s是通过函数发送给我的文件,必须打开。

0 个答案:

没有答案