Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字符串库中,模板函数不能与int值一起使用?_Python_String_Python 3.x_Templates - Fatal编程技术网

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

Python 从字符串库中,模板函数不能与int值一起使用?,python,string,python-3.x,templates,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

我正在尝试使用字符串中的模板。我有一个目录,里面有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:字符串索引必须是整数

我知道错误是什么。然而,我不知道如何解决它


有什么帮助吗

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

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

您的问题是调用template.substituteyear时没有分配替换。您需要将其格式化为:

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)
暗示

您不使用格式化方法有什么原因吗?你可以通过这样做得到同样的结果

for year in range(1880,2011):
    template = "/name/yob{}.txt".format(year)

谢谢@A芒果。很高兴能解决这个错误。不幸的是,这种格式有时会导致可读性问题,特别是对于像我这样的数据科学专家来说,他过去只处理过SAS和R。因此,我们试图使用模板。谢谢你的回复,它也帮助我与格式相处!