我正在将以下单行数据读取,更新并将其写入到单独的fruit.txt
文件中,此文件的格式和格式如下:
[["Peach",0,0,0], ["Banana",0,0,0], ["Apple",0,0,0], ["Pear",0,0,0], ["Mango",0,0,0], ["Orange",0,0,0], ["Apricot",0,0,0]]
当我在Python文件的开头执行此操作
with open("fruit.txt") as file:
fruit = file.read()
它将fruit.txt
中的数据正确分配给fruit
var。当我print(fruit)
时,它甚至看起来像预期的嵌套列表。
但是,当我查询fruit
变量时,例如通过其他功能动态更改0
的情况,或者当我尝试对嵌套列表进行排序,或者进行任何更改数据的操作时,它总是会返回各种错误。好像将fruit
var设置为文件中的数据时,它不会将其识别为嵌套列表,而是将其识别为字符串。因此,我无法在该列表上进行操作。
但是,如果我这样做:
with open("fruit.txt") as file:
fruit_count = file.read()
fruit = eval(fruit_count)
然后fruit
var表现良好-值会更新,并将其写回到文件中以备将来使用等。
我知道eval
从理论上讲是邪恶的(或者至少在大多数情况下应该避免),除非您信任数据源(在这种情况下我会这样做)。但是我只是想知道是否还有其他解决方案?
理想情况下,我不想使用任何其他模块,例如ast.literal_eval
答案 0 :(得分:1)
这可能并不理想,但是下面是使用json
模块的方法(即使您不想使用其他模块):
import json
from pprint import pprint
lists = [["Peach",0,0,0], ["Banana",0,0,0], ["Apple",0,0,0], ["Pear",0,0,0],
["Mango",0,0,0], ["Orange",0,0,0], ["Apricot",0,0,0]]
with open("fruits.json", "w") as fp:
json.dump(lists, fp)
with open("fruits.json", "r") as fp:
fruits = json.load(fp)
pprint(fruits)
输出:
[['Peach', 0, 0, 0],
['Banana', 0, 0, 0],
['Apple', 0, 0, 0],
['Pear', 0, 0, 0],
['Mango', 0, 0, 0],
['Orange', 0, 0, 0],
['Apricot', 0, 0, 0]]
请注意,回读的数据确实有正确的数据类型。