好的,我必须将file.txt分成更多文件,这里是代码
a = 0
b = open("sorgente.txt", "r")
c = 5
d = 16 // c
e = 1
f = open("out"+str(e)+".txt", "w")
for line in b:
a += 1
f.writelines(line)
if a == d:
e += 1
a = 0
f.close()
f.close()
所以,如果我运行它会给我这个错误:
todoController\WordlistSplitter.py", line 9, in <module>
f.writelines(line)
ValueError: I/O operation on closed file
我明白如果你做一个for循环,文件会被关闭,所以我试图把f放在for循环中,但它不起作用而不是得到:
out1.txt
1
2
3
4
out2.txt
5
6
7
8
我只得到文件的最后一行。我该怎么办,有什么方法可以回忆起我之前定义的开放功能吗?我是一个非常新的python,所以我很抱歉,如果我问的是我不能做的事情,请耐心等待:D
答案 0 :(得分:0)
你关闭了文件但没有从for循环中断。
答案 1 :(得分:0)
如果a == d你正在关闭f然后稍后(在下一次迭代中)你试图写入它导致错误。
还 - 你为什么两次关闭?
答案 2 :(得分:0)
您应该删除第一个f.close()
:
a = 0
b = open("sorgente.txt", "r")
c = 5
d = 16 // c
e = 1
f = open("out"+str(e)+".txt", "w")
for line in b:
a += 1
f.writelines(line)
if a == d:
e += 1
a = 0
# f.close()
f.close()
答案 3 :(得分:0)
f.close()
循环中的for
,然后open
新文件f
,因此下一次迭代时出错。您还应该使用with
来处理文件,从而节省您需要明确close
个文件。
由于您希望一次向每个out
文件写入四行,您可以按如下方式执行此操作:
file_num = 0
with open("sorgente.txt") as in_file:
for line_num, line in enumerate(in_file):
if not line_num % 4:
file_num += 1
with open("out{0}.txt".format(file_num), "a") as out_file:
out_file.writelines(line)
请注意,我使用变量名称使其更清晰。