在python中使用字符串

在python中使用字符串,python,string,irc,Python,String,Irc,当我尝试做一些像.topic1 2 3 4 5 6 7 8 9 10这样的事情时,它将频道的主题改为3 4 5 6 7 8 9 10,而不是整件事1 2 3 4 5 6 7 8 9 10我想知道为什么它从第三个字符串开始,而不是从开始?是否需要从字符串中拆分或剥离某些内容?这是显示问题的最简单示例: elif data.find('PRIVMSG') != -1: message = ':'.join(data.split (':')[2:]) if mes

当我尝试做一些像
.topic1 2 3 4 5 6 7 8 9 10
这样的事情时,它将频道的主题改为
3 4 5 6 7 8 9 10
,而不是整件事
1 2 3 4 5 6 7 8 9 10
我想知道为什么它从第三个字符串开始,而不是从开始?是否需要从字符串中拆分或剥离某些内容?

这是显示问题的最简单示例:

   elif data.find('PRIVMSG') != -1: 
       message = ':'.join(data.split (':')[2:]) 
       if message.lower().find('code') == -1: 
         nick = data.split('!')[ 0 ].replace(':',' ') 
         destination = ''.join (data.split(':')[:2]).split (' ')[-2] 
         function = message.split( )[0] 
         print nick + ' : ' + function
         arg = data.split( )   

         args = '' 
         for index,item in enumerate(arg) : 
              if index > 3 : 
                  if args == '': 
                      args = item 
                  else : 
                          args += ' ' + item 


 if data.find('.topic') != -1:
     nick = data.split('!')[ 0 ].replace(':','')
     for line in open('masters.txt'):
         if nick in line:
            sck.send('TOPIC ' + " " + chan + " " + args + '\r\n')
这都是由于
如果索引>3:

我想知道为什么它从第三个字符串开始,而不是从开始

因为那是你让它做的。
enumerate()
函数从0开始索引,因此索引0对应于字符串
'topic'
,索引1对应于字符串
'1'
,依此类推。因此,当您使用条件
if index>3
时,它将忽略前四个字符串(索引为0、1、2和3的字符串,在您的例子中是字符串
'topic'
'1'
'2'
'3'

首先,我们可以将回路简化为以下单线:

     data = ".topic 1 2 3 4 5 6 7 8 9 10"
     arg = data.split()
     args = ''
     for index,item in enumerate(arg):
          if index > 3:
              if args == '':
                  args = item
              else:
                  args += ' ' + item
     print args
也就是说,切片
arg
列表以获取从第四个条目开始的所有条目,然后使用
join()
函数将其连接成一个由字符
'
分隔的字符串

其次,如果您只想删除第一个条目并将其余条目加入字符串,只需将索引更改为1:

args = ' '.join(arg[4:])
如果不同的命令需要以不同的方式处理
arg
列表,则需要根据具体情况而不是在一个位置执行此操作:

args = ' '.join(arg[1:])

我修复了代码中的错误

arg = data.split()

if '.topic' in data:
    nick = data.split('!')[ 0 ].replace(':','')
    topic = ' '.join(arg[1:])
    for line in open('masters.txt'):
        if nick in line:
            sck.send('TOPIC %s %s\r\n' % (chan, topic))

elif '.bannick' in data:
    nick_to_ban = arg[0]
    length = arg[1]
    reason = ' '.join(arg[2:])
    for line in open('masters.txt'):
        if nick in line:
            sck.send('BAN %s %s %s %s\r\n' % (chan, nick_to_ban, length, reason))

这一个有效,我需要在声明通道变量后添加
:“
,以便它可以正确读取数据。

chan和
args
的值是什么?这与您的问题无关。。。但是您的
划线检查可能不够。如果我的尼克是
e
,会发生什么?您的
masters.txt
文件中可能有一行包含
e
。或者,我可以选择一个较短版本的尼克。在数据中使用
if'.topic:
而不是
if data.find('.topic')!=-1:
这个代码片段似乎不完整,
args的定义在哪里??一个包含输入的完整示例如何?@Dan D。我更新了代码。使用数据中的
if'.topic:
它仍然得到相同的输出,它从数字3开始,而不是从数字1开始。那么我应该更改什么?如果我更改
if index>3:
,它可能与其他命令有问题。
  if data.find('.topic') != -1:
     nick = data.split('!')[ 0 ].replace(':','')
     for line in open('masters.txt'):
         if nick in line:
            sck.send('TOPIC ' + " " + chan + " :" + args + '\r\n')