Python Can';t在函数中写入CSV

Python Can';t在函数中写入CSV,python,Python,这将返回异常“ValueError:关闭文件上的I/O操作” 我注意到,当我把所有的代码放在初始的CSV Open下时,一切都很好,但放在函数中就不起作用了 with open(r'C:\\Users\\ricco\Documents\\Proxy Database\\Proxy.csv','r+', newline= '') as file: writer = csv.writer(file) while True: dir = inpu

这将返回异常“ValueError:关闭文件上的I/O操作”

我注意到,当我把所有的代码放在初始的CSV Open下时,一切都很好,但放在函数中就不起作用了

with open(r'C:\\Users\\ricco\Documents\\Proxy Database\\Proxy.csv','r+', newline= '') as file:
        writer = csv.writer(file)
        while True:
            dir = input('Enter Operation > ')
            if dir == 'add':
                print('! Adding User !')
                name = input('Enter Name > ')
                writer.writerow([name])
                print('User Added')
                file.flush()
                break
        print('Done')

它不起作用,因为您没有将所有相关代码都放入函数中。 在函数内部的
块中打开文件。然后退出块(关闭文件),从函数返回,然后主程序尝试写入关闭的文件。。。因此出现了错误消息

如果要在函数中打开文件,但在调用例程中写入文件,则需要正常的
打开
,并让函数返回所需信息。例如:

def openFile(operation):

    handle = open(r'C:\\Users\\User\Documents\\Proxy Database\\Proxy.csv',operation, newline= '')
    writer = csv.writer(handle)
    return writer

...
writer = openFile("a")
...

它不起作用,因为您没有将所有相关代码都放入函数中。 在函数内部的
块中打开文件。然后退出块(关闭文件),从函数返回,然后主程序尝试写入关闭的文件。。。因此出现了错误消息

如果要在函数中打开文件,但在调用例程中写入文件,则需要正常的
打开
,并让函数返回所需信息。例如:

def openFile(operation):

    handle = open(r'C:\\Users\\User\Documents\\Proxy Database\\Proxy.csv',operation, newline= '')
    writer = csv.writer(handle)
    return writer

...
writer = openFile("a")
...
打开(r'C:\\Users\\User\Documents\\Proxy Database\\Proxy.csv',操作,换行符=“”)作为文件:
writer=csv.writer(文件)
如果没有带关键字的
,您会怎么做?你可以这样写:

file=open(r'C:\\Users\\User\Documents\\Proxy-Database\\Proxy.csv',操作,换行符=“”)
writer=csv.writer(文件)
file.close()文件
您看到的是正确的:with语句在末尾关闭文件(这里是在创建全局writer对象之后),因此任何进一步的I/O操作都将失败。在这种情况下,您应该删除with关键字并正常创建文件对象

file=open(r'C:\\Users\\User\Documents\\Proxy-Database\\Proxy.csv',操作,换行符=“”)
writer=csv.writer(文件)
但是在代码末尾,您应该添加
file.close()
,以确保它已关闭

打开(r'C:\\Users\\User\Documents\\Proxy Database\\Proxy.csv',操作,换行符=“”)作为文件:
writer=csv.writer(文件)
如果没有带关键字的
,您会怎么做?你可以这样写:

file=open(r'C:\\Users\\User\Documents\\Proxy-Database\\Proxy.csv',操作,换行符=“”)
writer=csv.writer(文件)
file.close()文件
您看到的是正确的:with语句在末尾关闭文件(这里是在创建全局writer对象之后),因此任何进一步的I/O操作都将失败。在这种情况下,您应该删除with关键字并正常创建文件对象

file=open(r'C:\\Users\\User\Documents\\Proxy-Database\\Proxy.csv',操作,换行符=“”)
writer=csv.writer(文件)
但是在代码末尾,您应该添加
file.close()
,以确保它已关闭


我不确定这个问题的答案是什么,因为您似乎已经找到了问题所在并找到了避免问题的方法。不过,您可以将最后一段代码放入函数中。请阅读上下文管理器。一旦您离开上下文(即
with
语句正下方的缩进块),上下文(和文件)就会关闭。我不确定这个问题的答案是什么,因为您似乎已经找出了问题所在并找到了避免问题的方法。不过,您可以将最后一段代码放入函数中。请阅读上下文管理器。一旦您离开上下文(即
with
语句正下方的缩进块),上下文(和文件)就会关闭。