【问题标题】:Dividing a line of text into elements using a common delimiter使用通用分隔符将一行文本划分为元素
【发布时间】:2014-10-21 16:17:18
【问题描述】:

我有一个播放列表文本文件。我正在尝试提取艺术家及其歌曲的列表。有 39 个订单项,它们显示为:

Rush - 红区 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]”并打印艺术家,我会得到整行文本、分隔符和所有内容。我见过类似的问题,但我无法从他们的解决方案中获得足够的洞察力来完成这项工作。任何帮助将不胜感激。

【问题讨论】:

  • 你确定你有正确的破折号吗?尝试从您正在阅读的文件中剪切并粘贴精确的符号。
  • 我认为它没有看到破折号,而是破折号的一些表示,在 unicode 中:\xe2
  • 使用您当前的示例,它可以工作"Rush - Red Sector A".split("-") 给我['Rush ', ' Red Sector A'],但是使用您在编辑问题之前拥有的字符串它不起作用"Jace Everett – Bad Things Yes – Owner Of A Lonely Heart".split("-") 给我['Jace Everett \xe2\x80\x93 Bad Things Yes \xe2\x80\x93 Owner Of A Lonely Heart']。遵循@jonrsharpe 直接使用文件中的符号的想法
  • 我也看到了。如果我复制并粘贴@jonrsharpe 的破折号,我会得到File "playlist.py", line 30 SyntaxError: Non-ASCII character '\xe2' in file playlist.py on line 30, but no encoding declared

标签: parsing python-2.7


【解决方案1】:

这是由于分隔字符“-”你认为它是“-”,但它实际上是一个不同的字符,看起来就像连字符。这个字符不在 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)

我之前的回答并没有解决问题的根源,但这对我来说也是一次很棒的学习经历。

【讨论】:

  • 这也已在here 中讨论过,并在PEP 0263 中进行了介绍
  • 对于像我这样的菜鸟来说,编码符号需要一直位于脚本的顶部。位置,位置,位置:)
猜你喜欢
  • 1970-01-01
  • 2017-02-09
  • 2022-01-10
  • 2011-09-11
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
相关资源
最近更新 更多