为何写入文件后,文件内容显示为<__main__.Goods object at 0x000001E33C668520>,如何转换为我输入的内容?
时间: 2024-03-17 15:40:12 浏览: 17
这是因为你写入文件的是一个对象,而不是对象的内容。如果想要将对象内容写入文件,你需要将对象转换为字符串或字节流的形式,然后再写入文件。常用的方法有两种:
1. 使用pickle模块将对象序列化为字节流,然后再写入文件,读取时再反序列化为对象。示例代码如下:
```python
import pickle
class Goods:
def __init__(self, name, price):
self.name = name
self.price = price
def __repr__(self):
return f"Goods(name={self.name}, price={self.price})"
goods = Goods("apple", 5.0)
# 将对象序列化为字节流
bytes_data = pickle.dumps(goods)
# 写入文件
with open("goods.bin", "wb") as f:
f.write(bytes_data)
# 读取文件并反序列化为对象
with open("goods.bin", "rb") as f:
bytes_data = f.read()
goods = pickle.loads(bytes_data)
print(goods) # 输出: Goods(name=apple, price=5.0)
```
2. 在对象中实现__str__或__repr__方法,将对象转换为字符串形式,然后再写入文件。示例代码如下:
```python
class Goods:
def __init__(self, name, price):
self.name = name
self.price = price
def __repr__(self):
return f"Goods(name={self.name}, price={self.price})"
def __str__(self):
return f"{self.name}, {self.price}"
goods = Goods("apple", 5.0)
# 将对象转换为字符串
str_data = str(goods)
# 写入文件
with open("goods.txt", "w") as f:
f.write(str_data)
# 读取文件并将字符串转换为对象
with open("goods.txt", "r") as f:
str_data = f.read()
goods = eval(str_data)
print(goods) # 输出: Goods(name=apple, price=5.0)
```
注意:第二种方法中,将字符串转换为对象的方式为eval,这种方式存在一定的安全风险,因为eval会执行字符串中的代码,建议使用第一种方法。