我只是两天的Python和本论坛。如果我的问题看起来很傻,请承担。我尝试搜索堆栈溢出,但无法关联已给出的信息。
请帮我解决这个问题
>>> import re
>>> file=open("shortcuts","r")
>>> for i in file:
... i=i.split(' ',2)
... if i[1] == '^/giftfordad$':
... print i[1]
...
^/giftfordad$
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
IndexError: list index out of range
我收到了我的欲望输出,但随着列表索引超出范围错误。 我的文件快捷方式包含四个用SPACE分隔的列。
如果值存在于变量中,请帮助我如何找到模式。 例如
var1=giftcard
如何在我的文件中找到^/var$
。提前感谢您的帮助。
从Jon的观点来看,我到达了这一点。但仍在寻找答案。下面给我一个空洞的结果。需要在[^ /和$]
的正则表达式中进行一些调整 >>> import re
>>> with open('shortcut','r') as fin:
... lines = (line for line in fin if line.strip() and not line.strip().startswith('#'))
... for line in lines:
... if re.match("^/giftfordad$",line):
... print line
从我的shell命令,我很容易得到答案。有人可以编写/更正这段代码实现结果,我正在寻找。非常感谢
$grep "\^\/giftfordad\\$" shortcut
RewriteRule ^/giftfordad$ /home/sathya/?id=456 [R,L]
答案 0 :(得分:1)
在此:
i=i.split(' ',2)
if i[1] == '^/giftfordad$':
这意味着i
现在是一个长度为1的列表(即,没有''字符可以拆分)。
此外,看起来您可能正在尝试使用正则表达式而if i[1] == '^/giftfordad$'
不是Python那样做的方式。该比较将写为:
if i[1] == '/giftfordad':
但是,如果您从正则表达式列表的文件中抓取它,那么这是一个完全有效的字符串;)
刚见过你的例子:
如果你正在处理一个.htaccess
类似的文件,你会想要忽略空行和大概注释的行......
with open('shortcuts') as fin:
lines = (line for line in fin if line.strip() and not line.strip().startswith('#'))
for line in lines:
stuff = line.split(' ', 2)
# etc...
答案 1 :(得分:0)
我把你给出的那一行作为一个例子,这就是我发现的,希望这符合你的期望(我知道你想在第2列中用^/tv$
替换^/giftfordad$
:< / p>
>>> s = 'RewriteRule ^/tv$ /home/sathya?id=123 [R=301,L]'
>>> parts = s.split()
>>> parts
['RewriteRule', '^/tv$', '/home/sathya?id=123', '[R=301,L]']
>>> if len(parts) > 1:
part = parts[1]
if not "^/giftfordad$" in part:
print ' '.join([parts[0]] + ["^/giftfordad$"] + parts[2:])
else:
print s
RewriteRule ^/giftfordad$ /home/sathya?id=123 [R=301,L]
join
的行是最复杂的:我通过连接重新创建列表:
^/giftfordad$
join
将所有这些元素作为字符串连接。