长期访问者,首次发布。我正在通过“自动化无聊的东西”学习Python,遇到了一些我想“自动化”以备将来使用的东西,但我有些困惑。
我想要做的是运行一个脚本,该脚本将创建预定义数量的文本文件。我一直在进行浏览,并拼凑了一个脚本,该脚本将创建一个新的文本文件,但只会创建一个文本文件。
import os
i = 0
while os.path.exists("newFile%s.txt" % i):
i += 1
newFile = open('newFile%s.txt' % i, 'w') # creates the file
newFile.write('This file is meaningless.')
newFile.close()
这工作正常,但是当我尝试使用for循环将此命令循环7次时,我得到的输出是:newFile [0,1,2,3,4,5,6] .txt 这是我的for循环代码作为示例:
numbers = range(0,7)
for i in numbers:
while os.path.exists("newFile%s.txt" % i):
numbers += 1
newFile = open('newFile%s.txt' % numbers, 'w')
newFile.write('This file is meaningless.')
newFile.close()
谁能帮助理解为什么它给我“ newFile [0、1、2、3、4、5、6] .txt”和for循环,以及我能做什么来完成我想要的?
答案 0 :(得分:1)
问题在于,在for循环中,您无需手动增加变量,但仍在手动增加错误的变量(在这种情况下为dask.array
)。这是for循环的工作。在第一种情况下,您必须手动执行此操作,因为您使用的是while循环来检查文件数。
在第二种情况下,numbers
和for
循环的组合对我来说没有意义。
while
也将引发以下错误,因为numbers += 1
是一个范围,并且您要向其添加1,它是numbers
(整数)类型。
TypeError:+ =不支持的操作数类型:“范围”和“整数”
此外,您可以简单地使用默认情况下从0开始的int
。也可以直接在for循环中使用它,而无需使用其他变量来存储范围(此处为range(7)
)>
使用以下版本删除增量部分
numbers
答案 1 :(得分:0)
这也是我第一次回答。我会尽力解释清楚。我假设您的脚本实际上不喜欢您帖子中的第一个代码,因为那里没有缩进,python应该在运行该错误时抛出错误。使用正确的缩进,它应该可以正常运行。
您的第二个脚本有一些问题。我将一一介绍。首先,您的脚本不应运行。 Python应该在TypeError
行加上numbers += 1
来抱怨。您正在尝试将int
添加到range
。
对于for循环,您不必增加index变量。 i
将遍历numbers
。您得到“ newFile [0、1、2、3、4、5、6] .txt”是因为for循环失败。仅逐行浏览脚本很容易理解。首先,将numbers
设置为range(0,7)
。 for循环不执行任何操作,而python提供TypeError
。在newFile = open('newFile%s.txt' % numbers, 'w')
行中,numbers
是range(0,7)
,Python将创建“ newFile [0,1,2,3,4,5,6] .txt”。
如果我正确理解您要执行的操作,则正确的代码应类似于@Bazingaa发布的代码。
import os
for i in range(0,7):
if os.path.exists("newFile%s.txt" % i):
newFile = open("newFile%s.txt" % i)
newFile.write("This file is meaningless.")
newFile.close()
希望我的回答有帮助。编码愉快!
答案 2 :(得分:0)
我将在回答您的问题时附上答案。据我了解,无论已经创建了多少个文件,您都希望创建7个新文件。因此,如果您以 newFile3.txt 和 newFile4.txt 开头,则在运行该程序后,您将拥有所有 newFileX.txt ,其中X取自0到8,共9个文件。
在这种情况下,您的代码仅在使用错误的变量和缩进时遇到一些问题。这应该起作用:
import os
numbers = range(0,7)
for i in numbers:
while os.path.exists("newFile%s.txt" % i):
i += 1
newFile = open('newFile%s.txt' % i, 'w')
newFile.write('This file is meaningless.')
newFile.close()
但是,在已经存在许多具有这些名称的文件的情况下,您将在while循环中多次运行此命令以检查相同的文件。我个人更喜欢在这种情况下进行手动迭代,并以推荐的方式打开文件:
import os
i = 0 # holds which newFileX number we are trying to create
count = 0 # holds number of created files
while count < 7:
if not os.path.exists("newFile%s.txt" % i):
# Open file an write to it
with open('newFile%s.txt' % i, 'w') as newFile:
newFile.write('This file is meaningless.\n')
count += 1 # We just created a file so increase count
i += 1
此外,我已经对此进行了评论,但是如果您正在学习,则应该学习python3。并没有太多区别,但是Python 3是未来,而Python 2则是为了与旧代码兼容而保留的。 / p>