Попытка перебрать предопределенный диапазон при создании пустых текстовых файлов - PullRequest
0 голосов
/ 24 декабря 2018

Долгое время посетитель, впервые публикует.Я изучаю Python через Automation the Boring Stuff и наткнулся на то, что я хотел «автоматизировать» для будущего использования, но я немного застрял.

Что я хочу сделать, это запустить скрипт, который создаст предварительно определенное количество текстовых файлов.Я занимался просмотром и собрал воедино скрипт, который создаст новый текстовый файл, но создаст только один.

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" счто за цикл и что я могу сделать, чтобы завершить то, что я хочу?

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

Это также мой первый ответ.Я постараюсь объяснить как можно яснее.Я предполагаю, что ваш скрипт на самом деле не похож на первый код в вашем посте, потому что там нет отступов, python должен выдать ошибку при его запуске.С правильным отступом все должно работать нормально.

В вашем втором сценарии есть несколько ошибок.Я пройдусь по ним один за другим.Прежде всего, ваш скрипт не должен запускаться.Python должен пожаловаться TypeError в строке numbers += 1.Вы пытаетесь добавить int к range.

. Для цикла for вам не нужно увеличивать индексную переменную.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()

Надеюсь, мой ответ поможет.Удачного кодирования!

0 голосов
/ 24 декабря 2018

Я включу ответ в мою интерпретацию вашего вопроса.Насколько я понимаю, вы хотите создать 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

Кроме того, я уже прокомментировал это, но если вы изучаете, вы должны изучить Python 3.Отличий не так много, но будущее за Python 3, Python 2 поддерживается для совместимости со старым кодом.

0 голосов
/ 24 декабря 2018

Проблема в том, что в цикле for вам не нужно увеличивать переменную вручную, но вы все равно увеличиваете неправильную переменную (в данном случае numbers).Это работа цикла for.В первом случае вам пришлось делать это вручную, потому что вы использовали цикл while для проверки количества файлов.

Во втором случае комбинация циклов for и while не имеет смысла для меня.

numbers += 1 также выдаст следующую ошибку, поскольку numbersдиапазон, и вы добавляете к нему 1, который является int (целочисленным) типом.

TypeError: неподдерживаемые типы операндов для + =: 'range' и 'int'

Кроме того, вы можете просто использовать range(7), который по умолчанию начинается с 0. Вы также можете использовать его непосредственно в цикле 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...