2014-08-27 43 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

相关问题