Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建空白文本文件时尝试在预定义范围内循环_Python_For Loop - Fatal编程技术网

Python 创建空白文本文件时尝试在预定义范围内循环

Python 创建空白文本文件时尝试在预定义范围内循环,python,for-loop,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

长期访客,第一次发布。我通过自动化这些无聊的东西来学习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循环,以及我能做些什么来完成我想要的吗?

问题是,在for循环中,你不需要手动递增变量,但你仍然手动递增错误的变量(
numbers
)。这就是for循环的工作。在第一种情况下,您必须手动执行此操作,因为您使用while循环来检查文件数

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

numbers+=1
也将抛出以下错误,因为
numbers
是一个范围,您正在向其中添加1,它是
int
(整数)类型

TypeError:不支持+=:“range”和“int”的操作数类型

此外,您只需使用默认从0开始的
范围(7)
。您也可以在for循环中直接使用它,而无需使用其他变量来存储范围(
numbers
此处)

使用以下版本删除增量零件

for i in range(7):                       
    if os.path.exists("newFile%s.txt" % i):
        newFile = open('newFile%s.txt' %i, 'w')      
        newFile.write('This file is meaningless.')
        newFile.close()

这也是我第一次回答。我会尽量解释清楚的。我假设您的脚本实际上与您文章中的第一个代码不同,因为没有缩进,python应该在运行该脚本时抛出一个错误。如果缩进正确,它应该运行正常

你的第二个剧本有一些地方不对劲。我会一个接一个地看。首先,您的脚本不应该运行。Python应该在
numbers+=1
行抱怨
TypeError
。您正在尝试将
int
添加到
范围中

对于For循环,不必增加索引变量<代码>i
将在
数字
中迭代。您得到的“newFile[0,1,2,3,4,5,6].txt”是因为for循环失败。只需逐行浏览脚本就很容易理解。首先,
numbers
设置为
范围(0,7)
。for循环没有做任何事情,python给出了
TypeError
。在
newFile=open('newFile%s.txt'%numbers',w')
行中,
numbers
范围(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()

希望我的回答有帮助。快乐编码

我会在对你问题的解释中加入一个答案。据我所知,无论已经创建了多少个文件,您都希望创建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
导入操作系统
i=0#保存我们试图创建的新文件编号
计数=0#保存已创建文件的数量
当计数小于7时:
如果不存在os.path.exists(“新文件%s.txt”%i):
#打开文件并写入它
打开('newFile%s.txt'%i',w')作为新文件:
newFile.write('此文件没有意义。\n')
count+=1#我们刚刚创建了一个文件,所以增加count
i+=1

另外,我已经对此发表了评论,但是如果您正在学习,您应该学习python 3。没有太多的区别,但是Python 3是未来,Python 2保留下来是为了与旧代码兼容。

我相信
numbers+=1
部分旨在跳过已经创建的文件,不要只写已经存在的文件。@ArthurMoraesDoLago:
numbers+=1
由于我提到的原因将无法工作<代码>数字是一个范围。也许OP希望它是
i
,在这种情况下,他/她应该使用
continue
是的,我注意到了错误,只是想指出代码没有完全按照他要求的那样做。他说“创建预定义数量的文本文件”,因此如果他想创建7个新文件,可能需要删除范围并手动迭代,即使已经存在一些具有该命名结构的文件。我猜他/她所说的预定义是指数字7。让我们等待OP插话,说出期望值和正确与否。现在事情似乎有点不清楚谢谢你的反馈,我试着运行你的代码,但是没有创建任何文件,也没有显示任何错误。我添加了两个print语句来查看失败的地方,并看到if语句没有运行。看着亚瑟的帖子,我试着用“如果不是”来表示if,结果成功了。不知道为什么,所以我将对if-Not语句进行一些研究。通过测试您的代码,我注意到您正在运行Python2。如果您正在学习,我建议您学习Python3,Python2只是为了与旧代码兼容而保留的。谢谢Arthur,他不知道这一点,但从现在起将这样做。