2016-04-29 3 views
3

タブ区切りファイルの各行の一部を削除して別の場所に新しいファイルに情報を書き込みます拡張)。関数を1つのファイルで使用するとうまくいきますが、ディレクトリ内のすべてのファイル(os.listdirを使用して)で使用しようとすると、リストのインデックスが範囲外になってしまいます。以下は私の関数である。ファイルを解析するためのPython関数は、単一ファイルでは機能しますが、バッチでは機能しません。

def ext_edit(filename): 
prefix = filename[0:-3] 
mapfile = "location/of/new/file/" + prefix + "map" 
with open(filename) as f: 
    with open (mapfile, "w") as out: 
     for line in f: 
      x = line.split("\t") 
      del x[2:4] 
      out.write(x[0]) 
      out.write(" ") 
      out.write(x[1]) 
      out.write("\n") 

これは、単一のファイルで正常に動作しますが、私はout.write(x[1])でエラーが発生して、範囲外のインデックスを取得します。 x[0]だけで動作するかどうかをテストするには、後者の部分を削除したが、 "No such file or directory:" filename.txt "というエラーが出る。

以下は、 :?、それは次のようになります。私は間違ってこれでつもりどこ

for file in os.listdir("location/of/original/file"): 
    ext_edit(file) 

は誰もが知ってい

エラーに基づいて

+1

エラーが発生し、ファイル名を印刷し、それが内部に一つだけのタブを持っていることがあります... – mvelay

+0

Iドンタグ 'batch-file'がここに適していると思いますか? –

+0

お詫び申し上げます。削除しました。 – spiral01

答えて

3

は、それが(ファイル名.txt 『"そのようなファイルやディレクトリを』)あなたを与えていないのresult現在の作業ディレクトリを基準にファイルを開こうとしています。あなたは、どちらかの可能性:

1)あなたのforループの前にos.chdir("location/of/original/file")を使用します。

os.chdir("location/of/original/file") 
for file in os.listdir("location/of/original/file"): 
    ext_edit(file) 

2)またはディレクトリ・パスとファイル引数を接頭辞:

for file in os.listdir("location/of/original/file"): 
    ext_edit("location/of/original/file" + file) 
+0

これで問題は解決しました。ありがとう。範囲外のインデックスの問題については、元のファイルの場所にある.ds_storeファイルが原因であることが判明しました。 if file.endswith( "。txt")がこれを解決した場合に使用します。 – spiral01

0

私は考え、可能な場合は、使用os.pathで提供される関数 コール機能は、あまりにも、ルートを必要とします。

for file in os.listdir("D:/_tmp/maps"): 
    ext_edit(os.path.join("D:/_tmp/maps", file)) 

同じ関数呼び出しのために:

def ext_edit(filename): 
    root, ext = os.path.splitext(filename) 
    prefix = os.path.basename(root) 
    mapfile = os.path.join("D:/_tmp/maps_new", prefix + "map" + ext) 
    with open(filename) as f: 
     with open (mapfile, "w") as out: 
      for line in f: 
      x = line.split("\t") 
      del x[2:4] 
      out.write(x[0]) 
      out.write(" ") 
      out.write(x[1]) 
      out.write("\n") 
関連する問題