разделяне на вложени кавички и запетаи без регулярни изрази

Когато стартирам кода си, изглежда, че има грешка, кодът ми помага да разделя, но да запазя запетая, но трябва да запази цитат, ако две са свързани заедно. Изглежда има три цитата, свързани заедно

вход

Result = parseCSV('""')
print(Result)

очакван резултат

['"']

действителен изход

['']

код:

def parseCSV(string):

    results = []
    current = ''
    is_quoted_right_now = False
    in_quotes = False


    for i in range(0, len(string)):
        currentletter = string[i]

        if currentletter == '"':
            if is_quoted_right_now == True:
                if in_quotes == True:
                    current = current + currentletter
                    in_quotes = False 
                else:
                    in_quotes = True

            else:
                is_quoted_right_now = True
                in_quotes = False

        else:

            shouldCheck  = False

            if is_quoted_right_now == True:

                if in_quotes == True:
                    is_quoted_right_now = False
                    in_quotes = False

                    shouldCheck = True

                else:
                    current = current + currentletter

            else:
                shouldCheck = True

            if shouldCheck == True:
                if currentletter == ',':
                    results.append(current)
                    current = ''

                else:
                    current = current +  currentletter

    results.append(current)
    return results

ето малко тестове и резултати:

Result = parseCSV('","')
print(Result)
#result = [',']

Result = parseCSV('"""')
print(Result)
#result = ["]

Result = parseCSV('hi,i,am,splitting')
print(Result)
#result = ['hi','i','am','splitting']

Result = parseCSV('"hi,I,am,not,splitting"')
print(Result)
#result = ['hi,I,am,not,splitting']

Result = parseCSV('abc, """')
print(Result)
#result = ['abc', '"']

Result = parseCSV('abc, ""')
print(Result)
#result = ['abc','']
#wanted result = ['abc','"']

Както можете да видите, има само един проблем, баща ми казва, че трябва да използвам чист Python без модули, така че може ли някой да помогне, без да използва неща като regex

Благодаря!!

Наистина бих искал някой да публикува примерен код, благодаря!!


person Alex Liu 33214    schedule 24.03.2020    source източник
comment
Някой има ли по-добро заглавие? Заглавието ми е малко дълго   -  person Alex Liu 33214    schedule 25.03.2020
comment
Освен това просто маркирайте името ми и поискайте разяснения   -  person Alex Liu 33214    schedule 25.03.2020
comment
Освен това, моля, без дискриминация, тъй като съм само 13-годишен начинаещ в кодирането   -  person Alex Liu 33214    schedule 25.03.2020
comment
Някакви отговори? Наистина имам нужда от помощ   -  person Alex Liu 33214    schedule 25.03.2020
comment
някои мисли: 1) има ли граници/ограничения за входовете? трябва ли да се държат добре по някакъв начин? най-вече мисля за двойни кавички. 2) разрешени ли са единични кавички в низовете? 3) какво би довело '"hi,I,am,not,splitting'? ['"h',...]? 4) използвате ли единични тестове? рискът при ръчните тестове с този тип задачи е, че като решиш 1 случай, да речем последния си, разбиваш други. този риск винаги ще съществува, но вие искате да знаете за него веднага - а това означава автоматизирани тестове. има библиотеки за това, можете ли да ги използвате?   -  person JL Peyret    schedule 25.03.2020
comment
ако не, ето отговор, който дадох на някого на несвързан въпрос stackoverflow.com/a/60795948. обаче погледнете края на първия блок код, в секцията dataexp. можете лесно да заредите вашите въведени данни, заедно с вашите желания. 5) държавните машини са един от начините да се подходи към проблема с какво-е-моето-текущо-ситуиране, с който се занимавате 6) връщане към hi i am not splitting, ако се очаква да се справят с липсващо " в крайна сметка правилно - моят въпрос #3, отговорът може да бъде известен само след като целият низ бъде сканиран и след това трябва да се върнете назад и да обработите всички , по различен начин.   -  person JL Peyret    schedule 25.03.2020
comment
така че може би друг начин е да сканирате целия низ, да отбележите позициите на ,, " и всичко останало и след това по някакъв начин да класифицирате състоянието на целия низ. не казвам, че е начинът, но бих помислил за това. 7) причината да не получавате твърде много отговори е, че това е нетривиален проблем, който изисква доста работа за покриване на всички случаи. 13 и начинаещ? поздравления за това колко далеч стигате, мнозина биха се затруднили да стигнат толкова далеч. 8) заглавие?. splitting nested quotes and commas without regular expressions? 9) късмет. 10) използвайте git или подобен, за да ви помогне.   -  person JL Peyret    schedule 25.03.2020
comment
@JL Peyret помогна много, благодаря   -  person Alex Liu 33214    schedule 25.03.2020