2014-07-22 53 views
1

是否有可能在python中执行以下操作?动态文件创建(命名)

i=1 
    while True: 
     w = open("POSCAR_i","w") 
     i=i+1 
     if i<10: 
     break 

因此,基本上,它应该创建POSCAR_1通过POSCAR_10

谢谢。

+1

您是否试图执行此代码?你会得到什么结果? – Lix

回答

3

这是更符合Python(及遍布更好)使用一个for循环:

for idx in range(1,11): 
    f = open("POSCAR_%d" % idx, "w") 
    f.close() 

你也可以使用format()方法,现在官方首选,尽管%运算符仍然非常普遍。

+0

+1 Pretty&Pythonic :) – Lix

2

你可以使用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 
+0

什么是 –

+0

@Vyktor的downvote什么是你可能想要阅读的问题 –

+0

你可能刚刚评论,这显然是一个错字 –

1

几乎正确

i=1 
while True: 
    w = open("POSCAR_%d" % i,"w") 
    i=i+1 
    if i>10: 
    break 

将工作

+0

不...你测试过吗? – Lix

+0

好点 - 我错过了突破标准 - 修复了它 – gkusner

+0

更好:)但这错过了最后一次迭代,并没有创建'POSCAR_10' – Lix

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

基本上答案是否定的。以下是关于为什么这是不可能的以及一些抛光的一些信息。

有几个关于你的代码的问题:

  1. w = open("POSCAR_i","w")创建与POSCAT_i名称的文件。 i被视为字符串的一部分。您应该使用w = open("POSCAR_%d" % i, "w")而不是w = open("POSCAR_i","w")来构建这样的字符串。

  2. if因为符合条件而首次执行。如在第一次迭代i = 1中那样,条件i < 10被满足,因此break被执行。将if条件更改为i > 10

  3. 此外,使用for循环代替while循环将是一个很好的做法。在这种情况下,您不会再使用if块。

  4. 在将其用于其他目的之前关闭文件句柄也是一种很好的做法。或者更好的做法是使用不同的文件句柄。

所以我会写的代码是这样的:

# 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 

享受!