2014-08-27 84 views
0

我有一個播放列表文本文件。我試圖提取藝術家和他們的歌曲列表。有39個行項目和它們將顯示爲:使用公共分隔符將文本行劃分爲元素

拉什 - 紅A部分
藍調旅行者 - 胡克

這是一個Unicode文件。

我試圖用「 - 」作爲分隔符和分裂有行:

x = open(u'list.txt') 

for line in x: 

    line = line.strip() 

    elements = line.split('-') 
    artist = elements[0] 
    song = elements[1] 

我得到一個回溯:

Traceback (most recent call last): 
    File "playlist.py", line 34, in <module> 
    song = line[1] 
IndexError: list index out of range 

它出現的分隔符不被認可。如果我註釋掉「song = elements [1]」和印刷藝術家,我會得到整行文字,分隔符和全部。我看到過類似的問題,但我無法從他們的解決方案中獲得足夠的洞察力來完成這項工作。任何幫助,將不勝感激。

+1

你確定你有正確的破折號嗎?嘗試從您正在閱讀的文件中剪切並粘貼精確的符號。 – jonrsharpe 2014-08-27 22:39:50

+0

我認爲它沒有看到短劃線,而是使用unicode表示破折號:\ xe2 – 2014-08-27 22:42:44

+0

使用當前的示例它可以工作''Rush - 紅色區段A「.split(」 - 「)'給我'[' Rush','紅色部門A']',但是在你編輯你的問題之前你已經有了字符串,這是行不通的。「Jace Everett - 壞事是 - 一個孤獨的心的主人」.split(「 - 」)'給出我'''Jace Everett \ xe2 \ x80 \ x93壞事是\ xe2 \ x80 \ x93孤獨之心的主人']'。按照@jonrsharpe的想法直接使用文件中的符號 – bvidal 2014-08-27 22:44:56

回答

0

這是由於定界符「 - 」你認爲它是「 - 」,但它實際上是一個不同的字符,看起來像連字符。這個字符不在ASCII表中,所以我們必須告訴python,我們將使用utf-8,它覆蓋了我們可能使用的幾乎所有字符。

#-*- coding: utf-8 -*- 

x = open(u'songs.txt') 
delimiter = '–' 

for line in x: 
line = line.strip() 
elements = line.split(delimiter) 
artist = elements[0] 
song = elements[1] 
print "{artist} {song}".format(artist=artist,song=song) 

我以前的回答並沒有解決問題的根源,但這對我來說也是一個很好的學習經驗。

+0

也被討論過[這裏](http://stackoverflow.com/questions/19149577/python-replace-long-dash-with-short-dash),並在[PEP 0263](http://legacy.python .org/dev/peps/pep-0263 /) – Aphid 2014-08-27 23:54:16

+1

對於像我這樣的noobs來說,編碼符號需要一直在腳本的頂部。位置,地點,位置:) – 2014-08-28 16:08:59

相關問題