Python读取文本文件数据至列表并实现数据分析的技术问询
文本文件数据读取与分析代码修正
任务要求
从指定TXT文件读取数据,将每行数字作为元素添加至列表;读取完成后将列表传入main(),作为Analyze函数的参数,在该函数中计算列表的最小值、最大值、平均值及总和。
原代码问题
def lueTiedosto(data): Tiedosto = open("L07T4D1.txt", 'r', encoding="UTF-8") Rivi = Tiedosto.readline() while (len(Rivi) > 0): data.append(int(Rivi)) Rivi = Tiedosto.readline() for element in data: print(element) print(f"Tiedosto L07T4D1.txt luettu.") Tiedosto.close() return element
原代码存在以下问题:
- 硬编码文件名,无法灵活切换读取的文件
- 返回值错误,返回的是最后一个遍历的
element而非填充好的目标列表data - 多余的元素打印逻辑,偏离了仅读取数据的任务要求
修正后读取函数代码
def lueTiedosto(data): default_filename = "L07T4D1.txt" Lue = input(f"Luettavan tiedoston nimi on '{default_filename}'.\nAnna uusi nimi, enter säilyttää nykyisen: ") # 用户直接回车则保留默认文件名 if not Lue: Lue = default_filename try: # 使用with语句自动管理文件资源,无需手动close with open(Lue, 'r', encoding="UTF-8") as Tiedosto: Rivi = Tiedosto.readline() while len(Rivi) > 0: # 过滤空行,避免转换非数字内容报错 stripped_line = Rivi.strip() if stripped_line: data.append(int(stripped_line)) Rivi = Tiedosto.readline() print(f"Tiedosto '{Lue}' luettu.") except FileNotFoundError: print(f"Virhe: Tiedostoa '{Lue}' ei löydy.") return data
注:在给定修正代码基础上补充了文件不存在的异常处理、空行过滤逻辑,同时用with语句优化了文件资源管理,提升代码健壮性。
完整实现代码
def lueTiedosto(data): default_filename = "L07T4D1.txt" Lue = input(f"Luettavan tiedoston nimi on '{default_filename}'.\nAnna uusi nimi, enter säilyttää nykyisen: ") if not Lue: Lue = default_filename try: with open(Lue, 'r', encoding="UTF-8") as Tiedosto: # 改用for循环遍历所有行,代码更简洁 for rivi in Tiedosto: stripped_line = rivi.strip() if stripped_line: data.append(int(stripped_line)) print(f"Tiedosto '{Lue}' luettu.") except FileNotFoundError: print(f"Virhe: Tiedostoa '{Lue}' ei löydy.") except ValueError: print(f"Virhe: Tiedostossa '{Lue}' on ei-numeroinen rivi.") return data def Analyze(num_list): if not num_list: print("Analyysia ei voi suorittaa: lista on tyhjä.") return min_val = min(num_list) max_val = max(num_list) total = sum(num_list) avg_val = total / len(num_list) print("\n--- Analyysitulokset ---") print(f"最小值: {min_val}") print(f"最大值: {max_val}") print(f"总和: {total}") print(f"平均值: {avg_val:.2f}") def main(): data_list = [] data_list = lueTiedosto(data_list) Analyze(data_list) if __name__ == "__main__": main()
代码说明
lueTiedosto函数:支持用户自定义文件名,自动处理文件资源,增加异常捕获避免程序崩溃,过滤无效行Analyze函数:接收数字列表,计算并输出核心统计值,同时处理空列表的边界情况main函数:初始化数据列表,串联读取与分析逻辑,作为程序入口
内容的提问来源于stack exchange,提问作者RovKat
相关产品推荐
相关产品推荐

