用于解析文件的Python函数适用于单个文件,但不适用于批处理

时间:2016-04-29 12:14:11

标签: python function

我有一个函数可以删除制表符分隔文件的每一行的一部分,然后将信息写入不同位置的新文件(具有不同的文件扩展名)。当我在单个文件上使用该函数时,它工作正常,但是当我尝试在目录中的每个文件上使用它时(使用os.listdir)我不断得到列表索引超出范围错误。以下是我的功能:

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],我删除了后一部分,但后来我得到了一个"没有这样的文件或目录:" filename.txt"错误。

以下是我在多个文件上应用该功能的呼吁:

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

有谁知道我在哪里出错?

2 个答案:

答案 0 :(得分:2)

根据它给你的错误结果(“没有这样的文件或目录:”filename.txt“),可能是它试图打开相对于你当前工作目录的文件。你可以:

1)在os.chdir("location/of/original/file")循环前使用for

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)

答案 1 :(得分:0)

如果可能,我会使用os.path中提供的函数。 调用函数也需要root:

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")