""" 读取文件的类 """ 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 浏览: 102
根据你提供的代码,我没有看到明显导致无限循环的问题。代码看起来应该是可以正常执行的。
然而,你在 `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 # 先定义一个抽象类用来做顶层设计,确定有那些功能需要实现 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`对象的内容。
多态性的好处是可以在不修改现有代码的情况下,轻松地扩展和添加新的子类实现。它提高了代码的可维护性和灵活性。
Traceback (most recent call last): File "C:/pythonProject/数据分析案例/file_define.py", line 7, in <module> class FileReader: File "C:/pythonProject/数据分析案例/file_define.py", line 9, in FileReader def read_data(self) -> list[Record]: TypeError: 'type' object is not subscriptable Process finished with exit code 1 为什么报错 要怎么修改
这个错误是由于在类型注解中使用了不支持索引操作的类型而导致的。在这个例子中,`list[Record]` 的类型注解使用了索引操作符,但是 `list` 类型本身是不支持索引操作的。
要解决这个问题,请确保你导入了正确的类型注解模块。在这种情况下,你需要导入 `typing` 模块,并使用 `List` 类型来替代 `list`。
请修改代码如下:
```python
from typing import List
class FileReader:
def read_data(self) -> List[Record]:
# 你的代码
```
这样应该就不会再报这个错误了。通过导入正确的类型注解模块并使用 `List` 类型,你可以正确地注解返回值为列表类型,并指定元素类型为 `Record`。
阅读全文