簡體   English   中英

用Python正確的方式解析字符串

[英]Parsing string with Python correct way

我在解析正確的方法時遇到了一些問題。 我想將完整的字符串分成兩個單獨的字符串。 然后從第一個字符串中刪除“ =”符號,從第二個字符串中刪除“,”符號。 從我的輸出中,我可以得出結論:我做錯了什么,但是我似乎並沒有找到問題所在。 我希望第一部分轉換為整數,並且已經使用map(int,split())進行了嘗試。

如果有人給我小費,我將不勝感激。

這是我的輸出:

('5=20=22=10=2=0=0=1=0=1', 'Vincent Appel,Johannes Mondriaan')

這是我的程序:

mystring = "5=20=22=10=2=0=0=1=0=1;Vincent Appel,Johannes Mondriaan"

def split_string(mystring):
    strings = mystring.split(";")
    x = strings[0]
    y = strings[-1]
    print(x,y)

def split_scores(x):
    scores = x.split("=")
    score = scores[0]
    names = scores[-1]
    stnames(names)
    print score

def stnames(y):
    studentname = y.split(",")
    name = studentname[1]
    print name

split_string(mystring)

split_string(mystring)運行第一個函數,生成包含2個字符串的元組。 但是沒有任何功能可以運行旨在執行進一步拆分的其他功能。

嘗試:

x, y = split_string(mystring)
x1 = split_scores(x)
y1 = stnames(y)
(x1, y1)

糟糕,您的函數會打印結果,而不返回結果。 因此,您還需要:

def split_string(mystring):
    # split mystring on ";"
    strings = mystring.split(";")
    return strings[0],strings[1]

def split_string(mystring):
    # this version raises an error if mystring does not have 2 parts
    x, y = mystring.split(";")
    return x,y

def split_scores(x):
    # return a list with all the scores
    return x.split("=")

def stnames(y):
    # return a list with all names
    return y.split(",")

def lastname(y):
    # return the last name (, delimited string)
    return y.split(",")[-1]

如果要在功能之間拆分任務,最好讓它們返回結果而不是打印結果。 這樣,它們可以以各種組合使用。 在函數中print僅用於調試目的。

或緊湊的腳本版本:

x, y = mystring.split(';')
x = x.split('=')
y = y.split(',')[-1]
print y, x

如果您希望分數為數字,請添加:

x = [int(x) for x in x]

來處理。

嘗試這個:

def split_string(mystring):
    strings = mystring.split(";")
    x = int(strings[0].replace("=",""))
    y = strings[-1].replace(","," ")
    print x,y

我的兩分錢。

如果我了解您要實現的目標,則此代碼可以幫助您:

mystring = "5=20=22=10=2=0=0=1=0=1;Vincent Appel,Johannes Mondriaan"

def assignGradesToStudents(grades_and_indexes, students):
    list_length = len(grades_and_indexes)
    if list_length%2 == 0:
        grades = grades_and_indexes[:list_length/2]
        indexes = grades_and_indexes[list_length/2:]
        return zip([students[int(x)] for x in indexes], grades)

grades_and_indexes, students = mystring.split(';')
students = students.split(',')
grades_and_indexes = grades_and_indexes.split('=')

results = assignGradesToStudents(grades_and_indexes, students)
for result in results:
    print "[*] {} got a {}".format(result[0], result[1])

輸出:

[*] Vincent Appel got a 5
[*] Vincent Appel got a 20
[*] Johannes Mondriaan got a 22
[*] Vincent Appel got a 10
[*] Johannes Mondriaan got a 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM