在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')