""" 读取文件的类 """ from data_define import Record from typing import List class FileReader: def read_data(self) -> List[Record]: pass class TextFileReader(FileReader): def __init__(self,path): self.path = path #复写父类方法 def read_data(self): f = open(self.path,"r",encoding="UTF-8") record_list = [] for line in f.readlines(): line = line.strip() data_list = line.split(",") record = Record(data_list[0],data_list[1],int(data_list[2]),data_list[3]) record_list.append(record) print(record_list) f.close() return record_list if __name__ == '__main__': test_data = TextFileReader("C:/test/2011年1月销售数据.txt") test_data.read_data() # for line in list: # print(list) 这个是我的代码 帮我看看哪里出错导致的无线循环
时间: 2024-04-12 07:28:39 浏览: 120
根据你提供的代码,我没有看到明显导致无限循环的问题。代码看起来应该是可以正常执行的。
然而,你在 `read_data()` 方法中打印了 `record_list`,这可能会导致在循环中不断打印出列表,使得看起来像是无限循环。你可以尝试注释掉 `print(record_list)` 这行代码,然后再次运行看看是否仍然出现无限循环问题。
此外,你在注释中提到了 `# for line in list`,但是这行代码被注释掉了。如果你想循环打印 `record_list`,请取消注释这行代码,并将 `list` 改为 `record_list`。
正确的代码应该是这样的:
```python
if __name__ == '__main__':
test_data = TextFileReader("C:/test/2011年1月销售数据.txt")
test_data.read_data()
# for line in record_list:
# print(line)
```
请尝试以上修改,并确保没有其他地方导致无限循环的问题。如果问题仍然存在,请提供更多的代码细节或错误信息,以便我可以更好地帮助你。
相关问题
import json from data_define import Record为什么会报错
在给定的代码中,导入模块`json`和`data_define`是没有问题的。然而,如果导入`data_define`模块时出现错误,可能有几个原因:
1. 模块未找到:请确保`data_define.py`文件存在,并且在与当前脚本相同的目录中。如果它在不同的目录中,确保将其正确添加到Python解释器的搜索路径中。
2. 语法错误:检查`data_define.py`文件中是否存在语法错误。这可能导致导入失败。
3. 循环导入:如果`data_define.py`文件中导入了当前脚本或其他导入链中的模块,则可能会导致循环导入错误。确保没有循环导入的情况发生。
请仔细检查以上问题,并确保`data_define.py`模块被正确地导入,并且不会引起任何错误。如果问题仍然存在,请提供更多关于错误的详细信息,以便我可以更好地帮助你解决问题。
import json from data_define import Record # 先定义一个抽象类用来做顶层设计,确定有那些功能需要实现 class FileReader: def read_data(self) -> list[Record]: """读取文件的数据,读到的每一条数据都转换为Record对象。将它们都封装到list内返回即可""" pass class TextFileReader(FileReader): def __init__(self,path): self.path = path # 定义成员变量记录文件的路径 # 复写(实现抽象方法)父类的方法 def read_data(self) -> list[Record]: f = open(self.path,"r",encoding="UFT-8") record_list: list[Record] = [] for line in f.readlines(): line = line.strip() # 消除读取到的每一行数据中的\n data_list = line.split(",") record = Record(data_list[0],data_list[1],int(data_list[2]),data_list[3]) record_list.append(record) f.close() return record_list class JsonFileReader(FileReader): def __init__(self,path): self.path = path def read_data(self) -> list[Record]: f = open(self.path,"r",encoding="UFT-8") record_list: list[Record] = [] for line in f.readlines(): data_dict = json.load((line)) record = Record(data_dict["data"],data_dict["order_id"],int(data_dict["money"]),data_dict("province")) record_list.append(record) f.close() return record_list if __name__ == '__main__': text_file_reader = TextFileReader("D:/2011年1月销售数据。txt") json_file_reader = JsonFileReader("D:/2011年2月销售数据JSON.txt") list1 = text_file_reader.read_data() list2 = json_file_reader.resa_data() for l in list1: print(l)
这段代码展示了一个简单的多态的例子。在这个例子中,`FileReader`是一个抽象类,定义了一个抽象方法`read_data()`,用于读取文件数据并返回`Record`对象的列表。`TextFileReader`和`JsonFileReader`是`FileReader`的子类,它们分别实现了`read_data()`方法来读取文本文件和JSON文件的数据。
通过多态性,我们可以使用父类类型的引用指向不同的子类对象,并调用相同的方法来实现不同子类对象的不同行为。在主程序中,创建了一个`TextFileReader`对象和一个`JsonFileReader`对象,并调用它们的`read_data()`方法来读取数据并返回`Record`对象的列表。然后,分别遍历这两个列表并打印每个`Record`对象的内容。
多态性的好处是可以在不修改现有代码的情况下,轻松地扩展和添加新的子类实现。它提高了代码的可维护性和灵活性。
阅读全文
相关推荐
















