гитарная табуляция к уке - PullRequest
       0

гитарная табуляция к уке

2 голосов
/ 19 августа 2011

поэтому я создал эту программу, где она берет вкладку гитары, получает номер лада и запускает его в словаре, который получает заметку и ищет ее в словаре примечаний уке.

, но моя проблема в том, если у меня есть вкладка в текстовом файле, например:

|-----11----------11----------11------11--13--11----------11----------11----------11------11--13--11---------------|
|-------13----------13----------13--------------------------13----------13----------13-----------------------------|
|--13-----13---13-----13---12-----12---------------12-13------13---13-----13---12-----12--------------------------|
|------------------------------------------------------------------------------------------------------------------|
|------------------------------------------------------------------------------------------------------------------|
|------------------------------------------------------------------------------------------------------------------|

Итак, я бы хотел открыть txt-файл и поставить букву перед каждым числом, соответствующим строке. поэтому каждое число в первой строке будет иметь слово «е», вторая строка: «B» и третье: «G»

И нужно, чтобы конечный результат был: G13 e11 B13 G13 и т. Д. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 19 августа 2011

Для разбора напишите функцию, которая берет строку вкладок и заметку, которая возвращает лады вместе с позицией:

import re

def parse_line(line, note):
    fret_pattern = re.compile(r'\d+')
    for match in fret_pattern.finditer(line):
        yield (match.start(), ''.join((note, match.group(0))))

Для первой строки |-----11-- это даст(6, "e11").Позже кортежи можно использовать для сортировки всех заметок по всем строкам.

Теперь просто open() файл, прочитайте первые 6 строк и дайте им правильные имена:

import itertools

notes = ['e', 'B', 'G', 'D', 'A', 'E']
with open('tab.txt') as fp:
    # Read-in 6 lines
    lines = itertools.islice(fp, 0, 6)

    # Holds all the notes.
    frets = []

    # Process the lines, append all notes to frets.
    for note, line in itertools.izip(notes, lines):
       frets.extend(parse_line(line, note))

    # Sort the frets by position.
    frets.sort()

    # Drop the positions.
    frets = [fret for pos, fret in frets]
1 голос
/ 19 августа 2011

Это должно быть то, что вы хотите.Но уже поздно.

tablines  = '''|------11----------11----------11------11--13--11----------11----------11----------11------11--13--11--------------|
|-------13----------13----------13--------------------------13----------13----------13-----------------------------|
|--13-----13---13-----13---12-----12---------------12-13------13---13-----13---12-----12---------------------------|
|-----------------7------------------------------------------------------------------------------------------------|
|------9----------7------------------------------------------------------------------------------------------------|
|-----------------7------------------------------------------------------------------------------------------------|'''

# this will rotate them sideways, so you can compare them.
tabs = zip(*[list(l) for l in tablines.split("\n")][::-1])

ot = []
tl = len(tabs)
i = 1;
strings = 'eadgbe'
while i + 1 < tl:
    chord = []
    for j in range(6):
       # Because we need to care very strictly about order, we need to look 
       # through each point on the set of lines individually.
       dt = tabs[i][j] + tabs[i+1][j]
       if dt.isdigit():
           # both are digits, that means this is a chord.
           chord.append(strings[j] + dt)
       elif tabs[i-1][j] == '-' and tabs[i][j].isdigit():
           chord.append(strings[j] + tabs[i][j])
    if chord: # a chord has been found
       # tuples used because there the distinct possibility of two chords at once
       ot.append(tuple(chord))
    i+=1

print ot

Результат:

[('g13',), ('a9', 'e11'), ('b13',),(«g13»,), («g13»,), («e7», «a7», «d7»), («e11»,), («b13»,), («g13»,), ('g12',), ('e11',), ('b13',), ('g12',), ('e11',), ('e13',), ('e11',), ('g12 ',), (' g13 ',), (' e11 ',), (' b13 ',), (' g13 ',), (' g13 ',), (' e11 ',), (' b13',), (' g13 ',), (' g12 ',), (' e11 ',), (' b13 ',), (' g12 ',), (' e11 ',), (' e13 ',), ('e11',)]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...