Python Can';t在函数中写入CSV
这将返回异常“ValueError:关闭文件上的I/O操作” 我注意到,当我把所有的代码放在初始的CSV Open下时,一切都很好,但放在函数中就不起作用了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
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
语句正下方的缩进块),上下文(和文件)就会关闭。