-1

我试图在一个循环中打开许多格式为 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只有很少的了解,我不知道该怎么做。有什么建议么?

谢谢

4

3 回答 3

2

在将其连接到其他字符串之前,您需要转换j为 a 。str从不同类型的变量构造字符串的一种方法是使用format,尽管有很多方法:

for j in range(1,50):
    in_file=open("{}_{}.dat".format(name, j), "r")
于 2013-10-30T18:03:39.193 回答
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)]

现在您有了一个存在并与您的给定模式匹配的文件列表。

于 2013-10-30T18:16:04.150 回答
0

尝试使用字符串格式

for j in range(1,50):
  in_file=open("%s_%i.dat"%(sys.argv[1],j.to_eng_string()), "r")

你也可以看看 using os.listdirfrom the ospackage

于 2013-10-30T18:06:27.443 回答