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



我有一个函数,它删除制表符分隔文件的每一行的一部分,然后将信息写入不同位置的新文件(具有不同的文件扩展名)。当我在单个文件上使用该函数时,它工作得很好,但当我尝试在目录中的每个文件上使用它时(使用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],我删除了后一部分,但随后我得到了一个"No such file or directory:"filename.txt"错误。

下面是我在多个文件上应用该功能的调用:

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

有人知道我在哪里做错了吗?

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

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)
如果可能的话,我会使用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")

最新更新