动态文件创建(命名)

时间:2014-07-22 17:32:20

标签: python

是否可以在python中执行以下操作?

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

所以基本上,它应该通过POSCAR_1创建POSCAR_10

谢谢。

5 个答案:

答案 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)

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

您的代码存在一些问题:

  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. 在将文件句柄用于其他目的之前关闭文件句柄也是一种好习惯。或者更好的做法是使用不同的文件句柄。

  5. 所以我会用这种方式编写代码:

    # 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
    

    享受!