Создание нового .txt файла в Python - PullRequest
0 голосов
/ 10 сентября 2018

я хочу создавать новый .txt файл каждый раз, когда я запускаю скрипт python. Любая идея, как это сделать. Мой текущий код:

import datetime
def write_up_commands(up_int):
    fp = open(datetime.datetime.now().strftime("20%y-%m-%d %H:%M:%S") + '_abc.txt', 'w+')
    for i in up_int:
        fp.write('int ' + i + '\n mode \n')
    fp.close()

что-то вроде

1_abc
2_abc
3_abc

Могу ли я добавить дату / время?

Ошибка:

IOError: [Errno 22] invalid mode ('w+') or filename: '2018-09-10 18:02:40_abc.txt'

Для пользовательского ввода:

def write_up_commands(up_int):
    user_text = input("write the name of the file: ")
    fp = open(datetime.datetime.now().strftime("%Y-%m-%d %H.%M.%S") + user_text + '.txt', 'w+')
    #with open(datetime.datetime.now().strftime("%Y-%m-%d %H.%M.%S") + user_text + '.txt', 'w+') as fp:
    for i in up_int:           
            fp.write('int ' + i + '\n mode \n')

NameError: name 'jinni' is not defined

1 Ответ

0 голосов
/ 10 сентября 2018

Ошибка, о которой вы сообщаете, вызвана : в имени папки. Замените это на действительный символ :

import datetime
def write_up_commands(up_int):
    fp = open(datetime.datetime.now().strftime("%Y-%m-%d %H.%M.%S") + '_abc.txt', 'w+')
    for i in up_int:
        fp.write('int ' + i + '\n mode \n')
    fp.close()

Давайте посмотрим, что происходит:
с datetime.datetime.now() мы спрашиваем время now, поэтому текущее время
с помощью .strftime("%Y-%m-%d %H.%M.%S") мы форматируем время из модуля datetime, как мы предпочитаем: %Y означает год с 4 цифрами, затем мы хотим -, затем месяц с двумя цифрами %m, затем -, две цифры день %d, пробел , 24-часовой формат часов %H, точка ., 2 цифры минуты %M, точка ., две цифры секунды %s.
Вы можете напечатать текущую дату и время с помощью:

print(datetime.datetime.now().strftime("%Y-%m-%d %H.%M.%S"))

с + '_abc.txt' мы добавляем в дату '_abc.txt' текст.
Вы можете напечатать полный текст с:

print(datetime.datetime.now().strftime("%Y-%m-%d %H.%M.%S") + '_abc.txt')

с open('my_file.txt', 'w+') мы просим нашу операционную систему создать файл с именем my_file.txt. w+ Открывает файл для записи и чтения. Перезаписывает существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.
с

for i in up_int:
    fp.write('int ' + i + '\n mode \n')
fp.close()

вы пишете в своем файле 'int ' + i + '\n mode \n' для каждого i в up_int.

Если мы хотим создать файл с другим именем, мы можем изменить строку (datetime.datetime.now().strftime("%Y-%m-%d %H.%M.%S") + '_abc.txt'. Например, если нам нужен файл с: текущей датой, подчеркиванием, вводом пользователя, .txt , мы можем написать:

user_text = raw_input("write the name of the file: ")
fp = open(datetime.datetime.now().strftime("%Y-%m-%d %H.%M.%S") + user_text + '.txt', 'w+')
...

Даже если не спросить, я бы хотел отметить, что fp.close() - это строка, которая закрывает файл. Такой метод опасно обрабатывать подобным образом, потому что, если вы забудете закрыть файл или что-то произойдет до его закрытия, вы оставите открытые файлы повсюду. Я предлагаю вам изменить весь свой код с помощью:

with open(datetime.datetime.now().strftime("%Y-%m-%d %H.%M.%S") + user_text + '.txt', 'w+') as fp:
    for i in up_int:
    fp.write('int ' + i + '\n mode \n')

, который автоматически обрабатывает процедуру закрытия в любой ситуации.

По второму вопросу вы фактически каждый раз создаете новый файл. Имейте в виду, что, поскольку имя файла меняется со временем, если вы создаете более 1 файла каждую секунду, каждый файл будет перезаписывать предыдущий.

В качестве примечания обратите внимание, что я изменил 20%y на %Y, что является правильным способом отображения 4-значного года

...