Почему текстовый документ не сохраняется в python
Перейти к содержимому

Почему текстовый документ не сохраняется в python

  • автор:

Не сохраняется файл после выполнения кода python, что делать?

Задача кода считывать pdf с компьютера и переносить текст в txt, но у меня почему-то после запуска кода в консоль через секунд 10 выводится слово «None» символизирующие выполнение функции и код выключается не сохранив и не создав файл txt

from gtts import gTTS import pdfplumber from pathlib import Path def pdf_to_mp3(file_path='test.pdf', language='en'): if Path(file_path).is_file() and Path(file_path).suffix == '.pdf': #return 'Файл прошел проверку, все good!' with pdfplumber.PDF(open(file=file_path,mode='rb')) as pdf: pages = [page.extract_text() for page in pdf.pages] text = ''.join(pages) text = text.replace('\n', '') with open('text1.txt', 'w', encoding='utf-8') as file: file.write(text) else: return 'Файл поврежден или не подходит!' def main(): print(pdf_to_mp3(file_path=r"C:\Users\hello\Desktop\Voice Enhancer\enc.pdf")) if __name__ == '__main__': main()
  • Вопрос задан более года назад
  • 237 просмотров

6 комментариев

Средний 6 комментариев

Функция open. Чтение и запись текстовых файлов в Python

Большие объемы данных хранят не в списках или словарях, а в файлах и базах данных. В этом уроке изучим особенности работы с текстовыми файлами в Python. Такие файлы рассматриваются как содержащие символы и строки.

Бывают еще байтовые (бинарные) файлы, которые рассматриваются как потоки байтов. Побайтово считываются, например, файлы изображений. Работа с бинарными файлами несколько сложнее. Нередко их обрабатывают с помощью специальных модулей Python (pickle, struct).

Функция open

Связь с файлом на жестком диске выполняется с помощью встроенной в Python функции open() . Обычно ей передают один или два аргумента. Первый – имя файла или имя с адресом, если файл находится не в том каталоге, где находится сама программа. Второй аргумент – режим, в котором открывается файл.

Обычно используются режимы чтения ( ‘r’ ) и записи ( ‘w’ ). Если файл открыт в режиме чтения, то запись в него невозможна. Можно только считывать данные. Если файл открыт в режиме записи, то в него можно только записывать данные, считывать нельзя.

Если файл открывается в режиме ‘w’ , то все данные, которые в нем были до этого, стираются. Файл становится пустым. Если не надо удалять существующие в файле данные, тогда следует использовать вместо режима записи, режим дозаписи ( ‘a’ ).

Если файл отсутствует, то открытие его в режиме ‘w’ создаст новый файл. Бывают ситуации, когда надо гарантировано создать новый файл, избежав случайной перезаписи данных существующего. В этом случае вместо режима ‘w’ используется режим ‘x’ . В нем всегда создается новый файл для записи. Если указано имя существующего файла, то будет выброшено исключение. Потери данных в уже имеющемся файле не произойдет.

Если при вызове open() второй аргумент не указан, то файл открывается в режиме чтения как текстовый файл. Чтобы открыть файл как байтовый, дополнительно к букве режима чтения/записи добавляется символ ‘b’ . Буква ‘t’ обозначает текстовый файл. Поскольку это тип файла по умолчанию, то обычно ее не указывают.

Нельзя указывать только тип файла, то есть open(«имя_файла», ‘b’) есть ошибка, даже если файл открывается на чтение. Правильно – open(«имя_файла», ‘rb’) . Только текстовые файлы мы можем открыть командой open(«имя_файла») , потому что и ‘r’ и ‘t’ подразумеваются по-умолчанию.

Функция open() возвращает объект файлового типа. Его надо либо сразу связать с переменной, чтобы не потерять, либо сразу прочитать.

Чтение файла

С помощью файлового метода read() можно прочитать файл целиком или только определенное количество байт. Пусть у нас имеется файл data.txt с таким содержимым:

one - 1 - I two - 2 - II three - 3 - III four - 4 - IV five - 5 - V

Откроем его и почитаем:

>>> f1 = open(‘data.txt’) >>> f1.read(10) ‘one — 1 — ‘ >>> f1.read() ‘I\ntwo — 2 — II\nthree — 3 — III\nfour — 4 — IV\nfive — 5 — V\n’ >>> f1.read() » >>> type(f1.read())

Сначала считываются первые десять символов. Последующий вызов read() считывает весь оставшийся текст. После этого объект файлового типа f1 становится пустым.

Заметим, что метод read() возвращает строку, и что конец строки считывается как ‘\n’ .

Для того, чтобы читать файл построчно существует метод readline() :

>>> f1 = open('data.txt') >>> f1.readline() 'one - 1 - I\n' >>> f1.readline() 'two - 2 - II\n' >>> f1.readline() 'three - 3 — III\n'

Метод readlines() считывает сразу все строки и создает список:

>>> f1 = open('data.txt') >>> f1.readlines() ['one - 1 - I\n', 'two - 2 - II\n', 'three - 3 - III\n', 'four - 4 - IV\n', 'five - 5 - V\n']

Объект файлового типа относится к итераторам. Из таких объектов происходит последовательное извлечение элементов. Элементами в данном случае являются строки-линии файла. Поэтому считывать данные из файла можно сразу в цикле без использования методов чтения:

>>> for i in open('data.txt'): . print(i) . one - 1 - I two - 2 - II three - 3 - III four - 4 - IV five - 5 - V >>>

Здесь выводятся лишние пустые строки, потому что функция print() преобразует ‘\n’ в переход на новую строку. К этому добавляет свой переход на новую строку. Создадим список строк файла без ‘\n’ :

>>> nums = [] >>> for i in open('data.txt'): . nums.append(i[:-1]) . >>> nums ['one - 1 - I', 'two - 2 - II', 'three - 3 - III', 'four - 4 - IV', 'five - 5 - V']

Переменной i присваивается очередная строка файла. Мы берем ее срез от начала до последнего символа, не включая его. Следует иметь в виду, что ‘\n’ это один символ, а не два.

Запись в файл

Запись в файл выполняется с помощью методов write() и writelines() . Во второй можно передать структуру данных:

>>> l = ['tree', 'four'] >>> f2 = open('newdata.txt', 'w') >>> f2.write('one') 3 >>> f2.write(' two') 4 >>> f2.writelines(l)

Метод write() возвращает количество записанных символов.

Закрытие файла

После того как работа с файлом закончена, важно не забывать его закрыть, чтобы освободить место в памяти. Делается это с помощью файлового метода close() . Свойство файлового объекта closed позволяет проверить закрыт ли файл.

>>> f1.close() >>> f1.closed True >>> f2.closed False

Если файл открывается в заголовке цикла ( for i in open(‘fname’) ), то видимо интерпретатор его закрывает при завершении работы цикла или через какое-то время.

Практическая работа

  1. Создайте файл data.txt по образцу урока. Напишите программу, которая открывает этот файл на чтение, построчно считывает из него данные и записывает строки в другой файл ( dataRu.txt ), заменяя английские числительные русскими, которые содержатся в списке ( [«один», «два», «три», «четыре», «пять»] ), определенном до открытия файлов.
  2. Создайте файл nums.txt , содержащий несколько чисел, записанных через пробел. Напишите программу, которая подсчитывает и выводит на экран общую сумму чисел, хранящихся в этом файле.

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Почему Питон не сохраняет, файл, хотя расширение в конце есть?

5f0f4c22243ff915526737.jpeg

Надо запустить код из текстового редактора в интерактивной оболочке IDLE, но файл не сохраняется перед тем, как выполнить Run module — почему?

  • Вопрос задан более трёх лет назад
  • 1415 просмотров

1 комментарий

Простой 1 комментарий

Как сделать чтобы результат сохранялся в .txt файл

Приветствую Всех Друзья! Не силен в Пайтоне, но нужно изменить код на автоматическое сохранение в .txt файл:

1 2 3 4 5
from bitcoin import * with open("allprivkeys.txt") as f: for line in f: print(privtopub(line.strip()))

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

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как сделать чтобы результат сохранялся в .txt файл
Приветствую Всех Друзья! Не силен в Пайтоне, но нужно изменить код на автоматическое сохранение в.

Как сделать чтобы документ сохранялся именно в .txt
Как сделать чтобы документ сохранялся именно в .txt а не просто как файл а именно в .txt. Код тут.

Как сделать чтобы после добавления или удаления из базы данных сохранялся результат?
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;.

Нужно дописать программу, чтобы результат сохранялся в файл
Помогите, пожалуйста, дописать программу, чтобы результат сохранялся в файл. #include "stdafx.h".

Где дописать .txt чтобы файл сохранялся с этим расширением?
Где дописать .txt чтобы файл сохранялся с этим расширением. программа: begin

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

DewCooper, прояви терпение, скйчас помогу

Добавлено через 6 минут

1 2 3 4 5 6 7
my_filename=str(input("имя файла"))#ФАЙЛ data=str(input("что в файле"))#данные в него отправляемые fext2='txt'# расширение файла print(my_filename) with open(my_filename + '.' + fext2, 'w', encoding='utf-8') as fp:# собираем то, что в файл попадет(data), +имя фйала(filename)+ расширение, открываем неа запись(w) print(data, file=fp, sep="\n")# запись в файл с переводом строки fp.close()# закрытие файла

Добавлено через 2 минуты
да, кодировку тоже ууказывать желательно, т.к. для python сие критично, особенно 3+(чувствителен к Uniocode)

Регистрация: 10.09.2016
Сообщений: 235

Выходит ошибка где file=fp равно красным светится

1 2 3
. print(data, file=fp, sep="\n")# запись в файл с переводом строки .

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

Добавлено через 7 минут

1 2 3 4 5 6 7 8 9
from bitcoin import * my_filename=str(input("имя файла")) data="мой ключ" fext2='txt' print(my_filename) with open(my_filename + '.' + fext2, 'w', encoding='utf-8') as fp: print(data, file=fp, sep="\n") fp.close()# закрытие файла

Добавлено через 20 секунд
И все работает

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
что в переменной data, то и в файл попадет.
Регистрация: 10.09.2016
Сообщений: 235
Dax этот код которую вы исправили работает на Python 2.7.15 ?
Регистрация: 10.09.2016
Сообщений: 235

ЦитатаСообщение от Dax Посмотреть сообщение

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

DewCooper, из имени файла убрать .txt

Добавлено через 30 секунд
И запуссти,проверим

Добавлено через 1 минуту
.txt в fext идет и он неверно расширение получает(дважды).

Регистрация: 10.09.2016
Сообщений: 235

ЦитатаСообщение от Dax Посмотреть сообщение

убрать .txt

Убрал все так же

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

DewCooper, на 3.6 без нареканий работает.

Добавлено через 1 минуту
DewCooper, поставьте 3.6 и все сложится,я эту конструецию провверил.

Регистрация: 10.09.2016
Сообщений: 235

Этот код работает и на Python 2.7.15
Можно как-нибудь исправить ?

1 2 3 4 5
from bitcoin import * with open("allprivkeys.txt") as f: for line in f: print(privtopub(line.strip()))

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

Синтаксис отличаться может,это да,но,я код провкрял

Добавлено через 2 минуты
Исправить так: ставить 3.6, устонавливать bitcoin, брать мой код и из 3-ей строки расширение файла в названии убирать )

Регистрация: 10.09.2016
Сообщений: 235

ЦитатаСообщение от Dax Посмотреть сообщение

ставить 3.6
Я уже устанавливаю только 3.7.2
На 3.7.2 надеюсь пойдет?

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057

Завтра гляну под 2.75 синтаксис может другой,а если поставить 3.6 оабртает сохранение,проверено)

Добавлено через 54 секунды
3,72 не гадо,слишком новый.

Регистрация: 10.09.2016
Сообщений: 235

ЦитатаСообщение от Dax Посмотреть сообщение

поставить 3.6

Я поставил эту версию ! Но код не сохраняет результат как на моем коде. Он сохраняет только название.

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
Тогда-точее,что и куда сохранить надо(какие данные)?
И завтра оформим

Эксперт Python

1354 / 651 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
DewCooper, lzk примера, запищу курс биткойна в файл(python 3.6), pycharm comunitty adition

1 2 3 4 5 6 7 8 9 10 11
import requests# импоортируем запрос r=requests.get('https://api.coindesk.com/v1/bpi/currentprice.json')# получаем данные cost='цена биткойна в долларах'+' '+r.json()['bpi']['USD']['rate']#выбираем из них важное print(cost)#выводим my_filename=str(input("имя файла"))#ФАЙЛ data=cost fext2='txt'# расширение файла print(my_filename) with open(my_filename + '.' + fext2, 'w', encoding='utf-8') as fp:# собираем то, что в файл попадет(data), +имя фйала(filename)+ расширение, открываем неа запись(w) print(data, file=fp, sep="\n")# запись в файл с переводом строки fp.close()# закрытие файла

В доказательство, файл приилаггается.
Вложения

курс3.txt (58 байт, 24 просмотров)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *