我是python/django的新手,我試圖從我的刮板中獲得更有效的信息。目前,該刮板會將漫畫書名稱列表並將其正確劃分爲三個部分(發佈日期,原始日期和標題)的CSV列表。然後我將當前日期和標題傳遞到我的數據庫的不同部分,我在我的Loader腳本中執行(將mm/dd/yy轉換爲yyyy-mm-dd,保存到「pub_date」列,標題轉到「標題」柱)。Python上的不規則字符串解析
相同的字符串可以是這樣的:
10/12/11|10/12/11|Stan Lee's Traveler #12 (10 Copy Incentive Cover)
我成功地抓住了日期,但標題是棘手。在這種情況下,我希望在第二個「|」之後填寫三個不同的列。標題應該轉到「標題」,一個charfield。數字12(在'#'之後)應該進入DecimalField「issue_num」,並且'()'之間的所有內容都應該進入「特殊」字符域。我不知道如何做這種嚴格的解析。有時,有多個#(一個漫畫尤其被描述爲一個包,「Containing issues#90-#95」),並且有幾個具有多個「()」組(例如,「背叛的猿人行星#1(4)(25副本激勵封面) )
什麼是一條好的道路來開始解決這個問題?我對If/else語句的瞭解迅速分裂爲更復雜的行。我怎樣纔能有效地(如果可能)pythonic-ly解析通過這些線和細分它們,以便我可以將它們插入我的數據庫中的正確位置?
你所描述的是*不*嚴格的解析。你需要定義你的輸出是什麼。例如,給定「包含問題#90-#95」,應該在'issue_num'中做些什麼?字符串「包含問題」是否顯示在「標題」中?那麼多個'()'組呢? ......無論如何,這種特殊的「智能解析」往往會陷入瘋狂。尋找其他方式獲取信息,或準備一次令人沮喪的體驗。 –
對於「#90-#95」的一個實例,我打算給它一個空值的問題編號,而是給它一個卷號。對於多個組,()的第二組總是包含我想要的部分,所以(理論上)我會考慮任何有兩組括號的問題,並要求它只查看第二個,刪除(或至少不參考)其餘部分。 – Alxjrvs