是否有可能在python中执行以下操作?动态文件创建(命名)
i=1
while True:
w = open("POSCAR_i","w")
i=i+1
if i<10:
break
因此,基本上,它应该创建POSCAR_1
通过POSCAR_10
。
谢谢。
是否有可能在python中执行以下操作?动态文件创建(命名)
i=1
while True:
w = open("POSCAR_i","w")
i=i+1
if i<10:
break
因此,基本上,它应该创建POSCAR_1
通过POSCAR_10
。
谢谢。
这是更符合Python(及遍布更好)使用一个for循环:
for idx in range(1,11):
f = open("POSCAR_%d" % idx, "w")
f.close()
你也可以使用format()方法,现在官方首选,尽管%运算符仍然非常普遍。
+1 Pretty&Pythonic :) – Lix
你可以使用str.format在我传递一个变量:
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
什么是 –
@Vyktor的downvote什么是你可能想要阅读的问题 –
你可能刚刚评论,这显然是一个错字 –
问题是您的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
基本上答案是否定的。以下是关于为什么这是不可能的以及一些抛光的一些信息。
有几个关于你的代码的问题:
行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
享受!
您是否试图执行此代码?你会得到什么结果? – Lix