Python 关闭文件上的I/O操作错误

Python 关闭文件上的I/O操作错误,python,file-io,runtime-error,Python,File Io,Runtime Error,所以我正在编写这个程序,它使用open()创建读取文件。当我尝试运行该程序时,它会在关闭的文件(第18行)上给我错误:ValueError:I/O操作 在我看到的关于这个话题的每一个问题中,这个问题总是与缩进有关。IE试图对未在同一循环中打开的文件进行操作。我的python有点生疏了,但是缩进看起来很好 我希望有人能给它一个快速检查,让我知道如果缩进是错误的,或者如果其他东西可能导致错误? 代码(错误已注释): 它看起来像一个缩进问题:你真的是说infle.close()和outfile.clo

所以我正在编写这个程序,它使用open()创建读取文件。当我尝试运行该程序时,它会在关闭的文件(第18行)上给我错误:ValueError:I/O操作

在我看到的关于这个话题的每一个问题中,这个问题总是与缩进有关。IE试图对未在同一循环中打开的文件进行操作。我的python有点生疏了,但是缩进看起来很好

我希望有人能给它一个快速检查,让我知道如果缩进是错误的,或者如果其他东西可能导致错误? 代码(错误已注释):


它看起来像一个缩进问题:你真的是说
infle.close()
outfile.close()
属于infle:循环中的
行吗?

它看起来像一个缩进问题:你真的是说
infle.close()
outfile.close()
属于
对于infle中的行:
循环?

您正在引用打开的文件,您从未执行过
.read()
要获取内容,您还尝试在循环中多次关闭文件。@MikeRixWolfe
对于infle中的行
已经读取了文件。您正在引用打开的文件,您从未执行过
.read()
要获取内容,您还尝试在循环中多次关闭该文件。@MikeRixWolfe
for line in infle
已经读取了该文件。您是正确的!我知道答案就在眼前。谢谢你的第二组眼睛:)@user2779949我通常在块后添加一个空行,使其更加直观地缩进,这将有助于看到
infle.close()
位于错误的块。你是对的!我知道答案就在眼前。谢谢你的第二组眼睛:)@user2779949我通常在块后添加一个空行,使其更加直观地缩进,这将有助于看到
infle.close()
位于错误的块。
sourceFile = 'test.html'
serviceTarget = "Plumbers & HVAC Experts"
cityTarget = "NJ"

services = {"Plumbers", "Air Conditioning Experts", "Drain Cleaning Experts"}
cities = {"Westfield", "Scotch Plains", "Clark"}

serviceNames = {"Plumbers":"plumbers", "Air Conditioning Experts":"ac", "Drain Cleaning Experts":"drain"}
totalPages = len(services)*len(cities)

for serviceRep in services:
    for cityRep in cities:
        outFileName = cityRep + " " + serviceNames[serviceRep] + ".html"
        outFileName = outFileName.replace(" ", "_");
        print("Writing " + outFileName + "...")
        infile = open(sourceFile)
        outfile = open(outFileName, 'w')
        for line in infile:   #This is the line giving me problems
            if serviceTarget in line:
                line = line.replace(serviceTarget,serviceRep)
            if cityTarget in line:
                line = line.replace(cityTarget,cityRep)
            outfile.write(line)
            infile.close()
            outfile.close()
        totalPages -= 1; 
        print("DONE -- " + str(totalPages) + " left to go")