【问题标题】:how to put data from a text file into array in python如何将文本文件中的数据放入python中的数组中
【发布时间】:2015-11-15 09:39:05
【问题描述】:

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

 [("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()]

【问题讨论】:

  • ARe rws 在您的代码中的某个地方定义?如果不是,您将不得不将它们保留为字符串。
  • 是的,它们是在代码顶部定义的,但我没有把它们放在她里面
  • 你能把它放进去吗?这是让它工作的一个非常重要的部分。

标签: python arrays


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我想到了一些关于你的实现的其余部分是什么样子以及你认为这一切将如何工作的问题,但下面是一个如何以非常直接的方式完成的示例:

    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 表示为某种数据类型是可以接受的,因为在创建元组时如果不对它进行评估,就很难让w+s 之类的内容出现在元组中。另一种方法是让ws 由可与+ 一起使用的数据类型表示。

    因此,即使这样可行,考虑文本文件的格式(如果您可以控制它)可能是个好主意,并查看是否可以将其更改为允许您使用某些解析的内容图书馆以一种简单的方式,例如看看如何更容易将其表示为 csv 甚至将其转换为 json。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 2014-04-19
      相关资源
      最近更新 更多