0

我只是两天的 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

我收到了我想要的输出,但还有列表索引超出范围错误。我的文件快捷方式包含用空格分隔的四列。

如果值驻留在变量中,请帮助我如何找到模式。例如

var1=giftcard

如何^/var$在我的文件中找到。提前感谢您的帮助。

从乔恩的角度来看,我明白了这一点。但仍在寻找答案。下面给了我一个空的结果。需要对 [^/ 和 $] 的正则表达式进行一些调整

    >>> 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]
4

2 回答 2

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...
于 2013-05-30T10:40:07.820 回答
0

我以您给出的行为例,这是我发现的,希望符合您的期望(我知道您想在第 2 列中替换^/tv$为):^/giftfordad$

>>> 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然后用于将所有这些元素连接为字符串。

于 2013-05-30T15:05:17.150 回答