-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

0

文字列フォーマットを使用してみてください:

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

パッケージos.listdirからos使用も検討できます。

于 2013-10-30T18:06:27.443 に答える
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 に答える