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

Python解析文件的函数适用于单个文件,但不适用于批处理,python,function,Python,Function,我有一个函数,它删除制表符分隔文件每行的一部分,然后将信息写入不同位置(具有不同文件扩展名)的新文件。当我在单个文件上使用该函数时,它工作得很好,但是当我尝试在目录中的每个文件上使用它时(使用os.listdir),我总是得到一个列表索引超出范围的错误。以下是我的职责: def ext_edit(filename): prefix = filename[0:-3] mapfile = "location/of/new/file/" + prefix + "map" with open(filen

我有一个函数,它删除制表符分隔文件每行的一部分,然后将信息写入不同位置(具有不同文件扩展名)的新文件。当我在单个文件上使用该函数时,它工作得很好,但是当我尝试在目录中的每个文件上使用它时(使用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)

有人知道我的错误在哪里吗?

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

1) 在循环的
之前使用
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")

打印引起错误的文件名,它可能只有一个标签…我认为标签
批处理文件
不适合这里?抱歉。已将其删除。这解决了问题。谢谢至于索引超出范围的问题,原来是由于原始文件位置中有一个.ds_存储文件。使用if file.endswith(“.txt”)解决了此问题。