Python 动态文件创建(命名)
可以在python中执行以下操作吗Python 动态文件创建(命名),python,Python,可以在python中执行以下操作吗 i=1 while True: w = open("POSCAR_i","w") i=i+1 if i<10: break i=1 尽管如此: w=打开(“POSCAR_i”,“w”) i=i+1 如果i您将使用i作为变量传入: w = open("POSCAR_{}".format(i),"w") 如果您想要1-10,for循环也会这样做 for i in range(1,11):
i=1
while True:
w = open("POSCAR_i","w")
i=i+1
if i<10:
break
i=1
尽管如此:
w=打开(“POSCAR_i”,“w”)
i=i+1
如果i您将使用i作为变量传入:
w = open("POSCAR_{}".format(i),"w")
如果您想要1-10,for循环也会这样做
for i in range(1,11):
w = open("POSCAR_{}".format(i),"w")
但是每次都会重新分配w
如果i==10,则需要使用,否则循环将立即结束,因为i
最初是<10
您可以使用i将i作为变量传入:
w = open("POSCAR_{}".format(i),"w")
如果您想要1-10,for循环也会这样做
for i in range(1,11):
w = open("POSCAR_{}".format(i),"w")
但是每次都会重新分配w
如果i==10,则需要使用,否则循环将立即结束,因为i
最初是<10
您可以使用几乎正确的i
i=1
while True:
w = open("POSCAR_%d" % i,"w")
i=i+1
if i>10:
break
将工作几乎正确
i=1
while True:
w = open("POSCAR_%d" % i,"w")
i=i+1
if i>10:
break
将起作用问题是您的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
i=1
而我的问题是您的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
i=1
虽然我使用for循环更具pythonic(而且更全面):
for idx in range(1,11):
f = open("POSCAR_%d" % idx, "w")
f.close()
您还可以使用format()方法,这是现在官方首选的方法,尽管%运算符在野外仍然非常常见。使用for循环更具pythonic风格(而且更好):
for idx in range(1,11):
f = open("POSCAR_%d" % idx, "w")
f.close()
您也可以使用format()方法,这是现在官方首选的方法,尽管%运算符在野外仍然非常常见。基本上答案是否定的。下面是一些关于为什么不可能的信息以及一些改进
关于您的代码,有几个问题:
行w=open(“POSCAR\u i”,“w”)
创建了一个名为POSCAT\u i的文件。i
被视为字符串的一部分。您应该使用w=open(“POSCAR\u%d”%i,“w”)
而不是w=open(“POSCAR\u 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
享受吧 基本上答案是否定的。以下是一些关于为什么不可能的信息,以及一些改进
关于您的代码,有几个问题:
行w=open(“POSCAR\u i”,“w”)
创建了一个名为POSCAT\u i的文件。i
被视为字符串的一部分。您应该使用w=open(“POSCAR\u%d”%i,“w”)
而不是w=open(“POSCAR\u 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
享受吧 您是否尝试执行此代码?你得到了什么结果?你试过执行这个代码吗?你得到了什么结果?你可以只是评论一下,这显然是一个打字错误。我不认为他在寻找一个重写的方法,只是为了让它工作——你的解决方案在逻辑上是正确的,但在语法上是正确的wrong@gkusner,这是一个怎样的重写,语法上有多错误?既然你已经修改了它,语法是正确的,你可以只是评论一下,这显然是一个打字错误。我不认为他在寻找一个重写的方法,只是为了让它工作-你的解决方案在逻辑上是正确的,但在语法上是正确的wrong@gkusner,这是一个怎样的重写和语法错误?好吧,现在你已经改变了它的语法是正确的没有。。。你测试过这个吗?更好:)但是这错过了最后一次迭代,不会产生一个错误-这很容易修复-但我认为你的答案更好,同时仍然保持原始代码的感觉不。。。你测试过这个吗?更好:)但是这错过了最后一次迭代,并且不会产生一个错误-这很容易修复-但是我认为你的答案更好,同时仍然保持原始代码的感觉