我有以下数据,目前存储在Python列表中:
formant_data = [
'ɑ',
125, 150, 10,
580, 50, 10,
780, 50, 9,
1010, 50, 10,
2530, 100, 9,
4400, 150, 8,
5300, 200, 8,
5880, 200, 7,
7420, 200, 7,
8860, 200, 7,
'a',
168, 120, 10,
680, 50, 9,
1000, 50, 9,
1500, 150, 8,
2500, 200, 7,
5200, 800, 7,
7200, 400, 6,
8500, 400, 6,
'ɛ',
150, 120, 10,
700, 50, 8,
750, 50, 8,
1800, 150, 8,
]
我打开包装如下:
import numpy as np
vowels = deque()
acc = deque()
for x in reversed(formant_data):
if isinstance(x,str):
symbol = x
print(symbol)
data = np.reshape( acc, (-1,3) )
vowels.appendleft(data)
acc.clear()
else:
acc.appendleft(x)
return vowels
我希望将数据移动到文本文件中,并将其读入。
最简单的方法是什么?
我不介意摆弄数据文件格式。主要目标是易于阅读。
编辑:也许我可以将其保存为data.py
和import data.py
?问题:我希望它驻留在input/data.py
编辑:%运行魔法?
答案 0 :(得分:1)
选项1:(编辑的类似选项)
您只需将列表存储在名为data
的文件中,然后执行data_file.py
选项2:(在评论中由jez给出)
效率更高,但理解起来有点棘手。您只需将列表存储在名为from data_file import *
的文件中,然后在您的代码中执行:
data_file.py
选项3:
您可以将列表中的所有内容存储在.txt或.whatever文件中,然后读取该文件的所有内容并将其拆分为","如下:
container = {}
exec(open('data_file.py').read(), container)
然后你就可以用你的清单做任何你想做的事。
答案 1 :(得分:1)
为了比import
或exec
更好的安全性,在保持可读性的同时,请使用标准json
模块:
保存:
import json
with open( filename, 'wt' ) as datafile:
json.dump( formant_data, datafile, indent=3 )
加载:
import json
with open( filename, 'rt' ) as datafile:
formant_data = json.load( datafile )
这使您可以灵活地设置数据格式。 json
序列化支持dict
类型,这可能是将数字与每个音素相关联的更自然的方式。
答案 2 :(得分:0)
很晚才将iPython添加到问题中 - 我并不认为它是相关的,但事实证明iPython有%run
魔法:
%run input/formant_data.py
虽然我会这样做,但我很感激其他答案。我认为import
需要packaging,因为该文件不在当前文件夹中。