2011-06-18 30 views
0

脫字符我有一個​​巨大的文本文件,每行似乎是這樣的:分割字符串可以用Python

某種通用的菜單^ a_sub_menu_title ^^ pagNumber

注意,第一個「一般菜單「有白色空格,第二部分(小標題)每個單詞用」_「字符分隔,最後是一個數字(一個頁碼)。我想分割3個(明顯的)部分中的每一行,因爲我想在python中創建某種目錄。

我正在嘗試重新模塊,但由於插入符號在這個模塊中有很強的意義,所以我無法弄清楚它是如何做到的。

有人能幫我嗎?

+2

一個簡單的谷歌搜索術語「蟒蛇拆分字符串」會產生你的答案。我並不是說要苛刻,但如果你不學習如何進行谷歌搜索,並且你的所有問題都依賴堆棧溢出,那麼要成爲一名稱職的程序員需要很長時間。祝你好運。 –

回答

4
>>> "Some sort of general menu^a_sub_menu_title^^pagNumber".split("^") 
['Some sort of general menu', 'a_sub_menu_title', '', 'pagNumber'] 
+0

精彩!!!! ...這是我需要的一切! – Alejandro

0

您需要做的是「逃避」特殊字符,如r'\^'。但是,在這種情況下,比正則表達式更好:

line = "Some sort of general menu^a_sub_menu_title^^pagNumber" 
(menu, title, dummy, page) = line.split('^') 

以更直接的方式爲您提供組件。

+0

精彩!!!! ......這是我需要的一切! – Alejandro

0

你可以只說string.split("^")將字符串分成包含每個段的數組。唯一需要注意的是,它會將連續插入的字符分成一個空字符串。你可以通過將連續的克拉摺疊成一個克拉,或者檢測結果數組中的空字符串來防止這種情況發生。

欲瞭解更多信息,請參閱http://docs.python.org/library/stdtypes.html

這是否幫助?

+0

精彩!!!! ......這是我需要的一切!!!! – Alejandro

2

如果你只是想三件你可以做到這一點通過生成器表達式:

line = 'Some sort of general menu^a_sub_menu_title^^pagNumber' 
pieces = [x for x in line.split('^') if x] 
# pieces => ['Some sort of general menu', 'a_sub_menu_title', 'pagNumber'] 
0

這也有可能是你的文件正在使用的格式,是與csv模塊兼容,還可以觀察到的是,特別是如果格式允許引用,因爲然後line.split會中斷。如果格式不使用引號,它只是分隔符和文本,line.split可能是最好的。

此外,對於re模塊,任何特殊字符都可以使用\進行轉義,如r'\^'。我建議在跳轉使用re之前建議1)學習如何編寫正則表達式,2)首先尋找解決問題的方法,而不是跳至正則表達式 - 「有些人在遇到問題時,會想」我知道,我會用正則表達式。「現在他們有兩個問題。 »