创建空白文本文件时尝试遍历预定义范围

时间:2018-12-24 02:16:38

标签: python for-loop

长期访问者,首次发布。我正在通过“自动化无聊的东西”学习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循环,以及我能做什么来完成我想要的?

3 个答案:

答案 0 :(得分:1)

问题在于,在for循环中,您无需手动增加变量,但仍在手动增加错误的变量(在这种情况下为dask.array)。这是for循环的工作。在第一种情况下,您必须手动执行此操作,因为您使用的是while循环来检查文件数。

在第二种情况下,numbersfor循环的组合对我来说没有意义。

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')行中,numbersrange(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>