从字符串库,模板函数不能与int值一起使用?

时间:2016-08-31 19:32:23

标签: python string python-3.x templates

我正在尝试使用来自字符串的模板。我有一个包含100个csv文件的目录,其中包含每年的数据。

例如:

yob1881.txt
yob1882.txt
yob1883.txt
yob1884.txt
yob1885.txt

现在我想使用模板,以便我可以遍历所有文件。所以我使用的是范围函数:

for year in range(1880,2011):
    template = Template(/name/year$year)
    template.substitute(year)

这是一个错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-4-85f21050945a> in <module>()
      2 filepath = tp('/pythonDataProjects/Loan Granting/names/yob$year.txt')
      3 year = '1880'
----> 4 print(filepath.substitute(year))

/Users/omkar/anaconda/lib/python3.5/string.py in substitute(*args, **kws)
    127             raise ValueError('Unrecognized named group in pattern',
    128                              self.pattern)
--> 129         return self.pattern.sub(convert, self.template)
    130 
    131     def safe_substitute(*args, **kws):

/Users/omkar/anaconda/lib/python3.5/string.py in convert(mo)
    117             named = mo.group('named') or mo.group('braced')
    118             if named is not None:
--> 119                 val = mapping[named]
    120                 # We use this idiom instead of str() because the latter will
    121                 # fail if val is a Unicode containing non-ASCII characters.

TypeError:字符串索引必须是整数

我知道错误是什么。但是,我没有得到如何解决它。

有任何帮助吗?

2 个答案:

答案 0 :(得分:0)

您应该将参数作为命名参数传递:

for year in range(1880, 2011):
    template = Template('/name/year$year')
    t = template.substitute(year=year)

答案 1 :(得分:0)

您的问题是,您在调用template.substitute(year)时未分配替换。您需要将其格式化为:

template.substitute(year=year)

此外,substitute()会返回一个新字符串,因此您应该重新分配此模板或将其分配给新变量。

for year in range(1880,2011):
    template = Template("/name/year$year")
    template = template.substitute(year=year)

    # Or

    new_temp = template.substitute(year=year)

<强>建议

您是否有理由不使用format()方法?您可以通过

获得相同的结果
for year in range(1880,2011):
    template = "/name/yob{}.txt".format(year)