【问题标题】:Split words into variables将单词拆分为变量
【发布时间】:2016-01-30 07:20:10
【问题描述】:

我正在使用 Python 阅读 MP3 广播流,它会打印出类似这样的内容

INXS~Disappear~RADIOSTATION~~MUSIC~~~360000~~~

我想将单词分开并将它们放在自己的表格/字段中。

上面是 Artist、SongName、RadioStation、MUSIC,一些我不知道它是什么并且永远不会改变的数字。

我发现了一种叫做分词的方法,但不确定这是否可行。

我也不确定歌曲或艺术家姓名中的空格是否会导致任何问题。空格不是下划线或任何巧妙的东西,它实际上是一个空格。

#!/usr/bin/env python
import urllib2
import datetime
import requests



stream_url = 'http://stream....'
request = urllib2.Request(stream_url)
try:
    request.add_header('Icy-MetaData', 1)
    response = urllib2.urlopen(request)
    icy_metaint_header = response.headers.get('icy-metaint')
    if icy_metaint_header is not None:
        metaint = int(icy_metaint_header)
        read_buffer = metaint+512
        content = response.read(read_buffer)
        title = content[metaint:].split("'")[1]
        print title
#       post_data = {'artist':'////', 'songname':'/////'}
#       post_response = requests.post(url='http:///////.co.uk', data=post_data)
        print datetime.datetime.now()
        import json


except:
     print 'null'
 #   print 'Error'
  #  print datetime.datetime.now()

【问题讨论】:

    标签: python json var


    【解决方案1】:

    你想使用字符串的split方法:

    stream = "INXS~Disappear~RADIOSTATION~~MUSIC~~~360000~~~"
    parts = stream.split("~")
    

    使用 python 甚至可以直接将 split 方法返回的列表元素分配给特定的变量:

    artist, songname, radiostation, music, number = [x for x in stream.split("~") if x]
    

    我使用了一个简单的列表推导来去除列表中的空元素。

    您可以使用过滤器内置函数来删除空元素,而不是使用列表推导:

     artist, songname, radiostation, music, number = filter(len, stream.split("~"))
    

    【讨论】:

      【解决方案2】:

      拆分功能将为您完成此任务。 Python 文档中有关字符串实用程序的更多信息

      https://docs.python.org/2/library/stdtypes.html#str.split

       artist, song_name, radio_station, music, misc_number = string.split("~")
      

      【讨论】:

      • 这不起作用,因为split 的返回值中会有空元素 -> 请参阅我的帖子
      • 取决于~的位置和数量。关于使用 split 的一般想法仍然存在。无需投票。
      【解决方案3】:
      import re
      
      st = 'INXS~Disappear~RADIOSTATION~~MUSIC~~~360000~~~'
      
      names = ('artist', 'songname', 'radiostatino', 'music', 'number')
      
      pp(list(zip(names,re.split(r'~+',st))))
      
      [('artist', 'INXS'),
       ('songname', 'Disappear'),
       ('radiostatino', 'RADIOSTATION'),
       ('music', 'MUSIC'),
       ('number', '360000')]
      

      【讨论】:

        猜你喜欢
        • 2012-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-21
        • 1970-01-01
        • 2010-10-21
        相关资源
        最近更新 更多