2015-11-15 5 views
-2

Я пытаюсь поместить данные из текстового файла в массив. ниже массив, который я пытаюсь создать.Как поместить данные из текстового файла в массив в python

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

Но вместо этого, когда я использую текстовый файл и загружаю данные из него, я получаю ниже в качестве моего вывода. он должен выводиться, как указано выше, я понимаю, что мне нужно разбить его, но я действительно не знаю, как это сделать для массива set. мог бы кто-нибудь помочь мне с этим

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

Атрибуты ARe 'r',' w' и 's определены в вашем коде где-нибудь? Если это не так, вам придется оставить их в виде струн. – IanAuld

+0

Да, они определены в верхней части кода, я не помещал их в нее, хотя – Phill

+0

Можете ли вы добавить это. Это очень важная часть работы. – IanAuld

ответ

0

Если вы имеете в виду list вместо array:

 with open(filename) as f: 
      list_name = f.readlines() 
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 представленный некоторые типы данных, как это было бы трудно иметь что-то вроде w+s появляется внутри кортежа без него оценивается при создании кортежа. Другой способ сделать это - иметь w и s, представленные типами данных, которые могут использоваться с +.

Таким образом, даже если это работает, это может быть хорошей идеей, чтобы думать о формате текстового файла (если у вас есть контроль над этим), и посмотреть, если оно может быть изменено в нечто такое, что позволит вам использовать некоторую парсинговую библиотеку простым способом, например посмотрите, как его легче представить как csv или даже превратить в json.

Смежные вопросы