是否可以在python中执行以下操作?
i=1
while True:
w = open("POSCAR_i","w")
i=i+1
if i<10:
break
所以基本上,它应该通过POSCAR_1
创建POSCAR_10
。
谢谢。
答案 0 :(得分:3)
问题是你的break
语句是在第一次迭代时执行的。
i
变量确实小于10 - 因此循环终止。
你需要做的是这样的事情:
i = 1
while True:
w = open("POSCAR_%d" % i, "w")
w.close()
i += 1
if i == 10:
break
一旦完成文件对象(在这种情况下是立即执行),请不要忘记关闭文件对象。
您也可以将终止条件放在循环的定义中:
i = 1
while i <= 10:
w = open("POSCAR_%d" % i, "w")
w.close()
i += 1
答案 1 :(得分:3)
使用for循环更加pythonic(并且更好):
for idx in range(1,11):
f = open("POSCAR_%d" % idx, "w")
f.close()
您也可以使用format()方法,这种方法现在已被官方推荐,尽管%运算符在野外仍然更为常见。
答案 2 :(得分:2)
您可以使用str.format将i作为变量传递:
w = open("POSCAR_{}".format(i),"w")
如果你想1到10,for循环会做同样的事情。
for i in range(1,11):
w = open("POSCAR_{}".format(i),"w")
但每次都会重新分配w
。
您需要使用if i==10
,否则您的循环会立即结束,i
最初为< 10
您可以使用i <=10
作为条件并删除if语句:
i=1
while i <= 10:
with open("POSCAR_{}".format(i),"w") as w: # with will close your files automatically
i+=1
答案 3 :(得分:1)
几乎正确
i=1
while True:
w = open("POSCAR_%d" % i,"w")
i=i+1
if i>10:
break
将起作用
答案 4 :(得分:1)
基本上答案是否定的。这里有一些关于为什么不可能以及一些抛光的信息。
您的代码存在一些问题:
第w = open("POSCAR_i","w")
行创建一个名为 POSCAT_i 的文件。 i
被视为字符串的一部分。您应该使用w = open("POSCAR_%d" % i, "w")
而不是w = open("POSCAR_i","w")
构建此类字符串。
if
第一次执行,因为它的条件已满足。与第一次迭代i = 1
一样,满足条件i < 10
,因此执行break
。将if
条件更改为i > 10
。
使用for
循环代替while
循环也是一个好习惯。在这种情况下,您不再需要if
阻止。
在将文件句柄用于其他目的之前关闭文件句柄也是一种好习惯。或者更好的做法是使用不同的文件句柄。
所以我会用这种方式编写代码:
# Previous codes
.
.
.
Files = [];
for i in range(1,11):
w = open("POSCAR_%d" % i, "w");
Files.append(w);
# Rest of the code
.
.
.
for w in Files:
w.close();
# End of code
享受!