Python записывает каждую строку в файл

Я пытаюсь записать каждую строку в файл. Скажем, моя программа выводит следующее:

A man a bird a tree

A sleek ball in the terminal

We have our guests waiting

Я хочу, чтобы каждая строка записывалась в новый файл или базу данных. Я предполагаю, что концепция та же.

def break(tmp_file):
    n = 50
    with open(tmp_file) as c:
        out = []
        for line in c:
            for word in line.split():
                out.append(word)
                if word.endswith(('.', '!')) and len(out) >= n:
                    print(' '.join(out))
                    print("\n\n")
                                        f = open('save_file', "w+")
                            f.write(out)
                            f.close()
                    del out[:]

        # don't forget to flush the buffer
        if out:
            print(' '.join(out))

На данный момент он сохраняет все строки в один и тот же файл. Я ожидаю, что он будет сохранен в уникальный файл, например:

Line1 - unique_file_1
Line2 - unique_file_2
...

Разве вы не должны просто изменить имя выходного файла?

Sebastien D 22.05.2019 14:03

Как изменить имена файлов во время работы скрипта?

ForALLs 22.05.2019 14:05

Текст говорит что-то (каждую строку записывайте в отдельный файл), код делает что-то еще (разделяет строки, содержащие . или ! или длиннее 50 слов), и вы даже не говорите, как следует называть разные файлы. Какую помощь вы ожидаете? Неудивительно, что вы получаете очень разные ответы, потому что каждый или мы понимаем разные вопросы :-(

Serge Ballesta 22.05.2019 14:11

Мой код разделен на строки, содержащие . or ! Как записать каждую строку в файл, используя дату и время для уникальности.

ForALLs 22.05.2019 14:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
92
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте enumerate

Бывший:

def break(tmp_file):
    n = 50
    with open(tmp_file) as c:
        out = []
        for ind, line in enumerate(c, 1):
            for word in line.split():
                out.append(word)
                if word.endswith(('.', '!')) and len(out) >= n:
                    print(' '.join(out))
                    print("\n\n")
                    f = open('Line{} - unique_file_{}'.format(ind), "w+")  #File name as requested 
                    f.write(out)
                    f.close()
                    del out[:]

        # don't forget to flush the buffer
        if out:
            print(' '.join(out))

Спасибо, это перечисление показывает «индекс кортежа вне допустимого диапазона». Есть ли для этого причина?

ForALLs 23.05.2019 12:25
Ответ принят как подходящий

Проблема в том, что вы сохраняете результаты в одном и том же файле save_file, вы можете попробовать что-то вроде этого.

import datetime

n = 50
with open("infile") as c:
    out = []
    for line_number, line in enumerate(c):


        for word in line.split():
            out.append(word)
            if word.endswith(('.', '!')) and len(out) >= n:
                print(' '.join(out))
                print("\n\n")

        if out:
            f = open(str((line_number+1).txt), "w+")
            f.write(' '.join(out))
            f.close()
            del out[:]

# don't forget to flush the buffer
if out:
    print(' '.join(out))

как бы вы предложили мне сохранить имена файлов следующим образом: 01.txt, 02.txt, 03.txt ..

ForALLs 23.05.2019 00:34

Вы можете использовать перечисление для этого. Или иметь переменную счетчика.

Umair Mohammad 23.05.2019 07:21

Работал. Спасибо.

ForALLs 23.05.2019 17:14

Другие вопросы по теме