我试图在循环中打开一些名为name_1.dat,name_2.dat等的文件。如果我只是写
for j in range(1,50):
in_file=open(name+j+".dat", "r")
我得到错误“TypeError:无法连接'str'和'int'对象”,我有点理解。我尝试将其更改为
for j in range(1,50):
in_file=open(sys.argv[1]+j.to_eng_string()+".dat", "r")
但现在我收到了错误"AttributeError: 'int' object has no attribute 'to_eng_string'"
,我可以理解这一点。由于对python知之甚少,我不知所措。有什么建议吗?
由于
答案 0 :(得分:2)
在将其连接到其他字符串之前,您需要将j
转换为str
。从不同类型的变量构造字符串的一种方法是使用format
,尽管有很多方法:
for j in range(1,50):
in_file=open("{}_{}.dat".format(name, j), "r")
答案 1 :(得分:0)
尝试使用string formatting:
for j in range(1,50):
in_file=open("%s_%i.dat"%(sys.argv[1],j.to_eng_string()), "r")
您还可以使用the os
package中的os.listdir
。
答案 2 :(得分:0)
这里的大多数答案都向您展示了如何生成与文件名模式匹配的字符串。如果假设名为name35.dat
的文件不存在,则需要捕获该异常。
在这里,我正在使用glob查看与该模式匹配的所有文件实际存在的文件:
import glob
print glob.glob('name[0-9]*.dat')
使用正则表达式限制某些子集:
import re, glob, sys
def expand(x,lo=0,hi=sys.maxint):
return lo<=int(re.search(r'\d+', x).group(0))<=hi
# all files that match 'name1.dat' to 'name50.dat' inclusive
print [e for e in glob.glob('name[0-9]*.dat') if expand(e, 1, 50)]
现在您有一个存在且符合您给定模式的文件列表。