Python解释器在变量为字符串时将变量定义为郁金香?

时间:2017-08-09 02:40:36

标签: python concatenation

我在互联网上找到了这个代码,意在搜索压缩文件夹中的文本文件以查找匹配项。我在IDLE中运行它以查看它是如何工作的......但我有一个问题,它似乎是这一行:

fname = seed + ".txt"

错误消息返回:

Traceback (most recent call last):
File "C:/Users/[name]/AppData/Local/Programs/Python/Python36-32/zip2.py", line 10, in <module>
fname = seed + ".txt"
TypeError: can only concatenate tuple (not "str") to tuple

以下是代码:

import re
from zipfile import *
findnothing = re.compile(r"Next nothing is (\d+)").match
comments = []
z = ZipFile("channel.zip", "r")

seed = "90052"

while True:
    fname = seed + ".txt"
    comments.append(z.getinfo(fname).comment)
    guts = z.read(fname)
    m = findnothing(guts.decode('utf-8'))
    if m:
        seed = m.groups(1)
    else:
        break
 print("".join(comments))

我搜索过stackoverflow,并没有发现任何类似于我的问题。他们中的大多数人声明变量中的逗号通常会导致编译器将其视为元组。我不明白为什么说种子是一个元组。没有逗号,没有括号或其他任何将其定义为Python编译器的元组的东西。我该如何解决这个问题?

提前致谢

2 个答案:

答案 0 :(得分:1)

首先,re.match仅匹配字符串的开头。确保您并不想使用re.search代替!

其次,m.groups(1)会返回类似('12345',)的元组。请改为seed = m.groups(1)[0]

答案 1 :(得分:1)

m.groups(1)更改为m.group(1)(单数,而非复数)。根据{{​​3}}处的文档,group返回单个匹配,但groups返回所有匹配的元组。当seed替换为groups的输出时,您将在循环中第二次收到错误,这是一个元组。