如何将文本文件中的数据放入python中的数组中

时间:2015-11-15 09:39:05

标签: python arrays

我正在尝试将文本文件中的数据放入数组中。下面是我想要创建的数组。

 [("major",r,w,w,s,w,w,w,s), ("relative minor",r,w,s,w,w,s,w,w),
  ("harmonic minor",r,w,s,w,w,s,w+s,s)]

但是当我使用文本文件并从中加载数据时,我得到下面作为我的输出。它应该输出如上,我意识到我必须分裂它,但我真的不知道如何这种设置数组。任何人都可以帮我这个

['("major",r,w,w,s,w,w,w,s), ("relative minor",r,w,s,w,w,s,w,w), 
 ("harmonic minor",r,w,s,w,w,s,w+s,s)']

下面是我试图加载的文本文件。

("major",r,w,w,s,w,w,w,s), ("relative minor",r,w,s,w,w,s,w,w), ("harmonic minor",r,w,s,w,w,s,w+s,s)

这就是我加载它的方式

file = open("slide.txt", "r")

scale = [file.readline()]

2 个答案:

答案 0 :(得分:0)

如果您的意思是list而不是array

     with open(filename) as f:
          list_name = f.readlines() 

答案 1 :(得分:0)

关于你的其他实现是什么样的以及你如何理解这一切将会起作用的一些问题会浮现在脑海中,但下面是一个如何以一种非常直接的方式完成这个过程的例子:

class W(object):
    pass


class S(object):
    pass


class WS(W, S):
    pass


class R(object):
    pass


def main():
    # separate parts that should become tuples eventually
    text = str()
    with open("data", "r") as fh:
        text = fh.read()
    parts = text.split("),")

    # remove unwanted characters and whitespace
    cleaned = list()
    for part in parts:
        part = part.replace('(', '')
        part = part.replace(')', '')
        cleaned.append(part.strip())

    # convert text parts into tuples with actual data types
    list_of_tuples = list()
    for part in cleaned:
        t = construct_tuple(part)
        list_of_tuples.append(t)

    # now use the data for something
    print list_of_tuples


def construct_tuple(data):
    t = tuple()
    content = data.split(',')
    for item in content:
        t = t + (get_type(item),)
    return t


# there needs to be some way to decide what type/object should be used:
def get_type(id):
    type_mapping = {
        '"harmonic minor"': 'harmonic minor',
        '"major"': 'major',
        '"relative minor"': 'relative minor',
        's': S(),
        'w': W(),
        'w+s': WS(),
        'r': R()
    }
    return type_mapping.get(id)


if __name__ == "__main__":
    main()

这段代码做了一些假设:

  • 文件data的内容为:

    ("major",r,w,w,s,w,w,w,s), ("relative minor",r,w,s,w,w,s,w,w), ("harmonic minor",r,w,s,w,w,s,w+s,s)
    
  • 您需要一个包含值的元组列表。

  • w+s由某种数据类型表示是可以接受的,因为在创建元组时,如果没有对它进行求值,那么很难在{$ 1}}中出现类似w+s的内容。另一种方法是让ws由可以与+一起使用的数据类型表示。

所以,即使这样可行,也可以考虑一下文本文件的格式(如果你有控制权),并查看它是否可以改为允许你使用一些解析的东西。图书馆以简单的方式,例如看看它如何更容易被表示为csv甚至将它变成json。