我正在尝试使用来自字符串的模板。我有一个包含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:字符串索引必须是整数
我知道错误是什么。但是,我没有得到如何解决它。
有任何帮助吗?
答案 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)