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