将列表从iPython单元格移动到数据文件中

时间:2015-11-12 15:58:40

标签: python list file csv ipython

我有以下数据,目前存储在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.pyimport data.py?问题:我希望它驻留在input/data.py

编辑:%运行魔法?

3 个答案:

答案 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)

为了比importexec更好的安全性,在保持可读性的同时,请使用标准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,因为该文件不在当前文件夹中。