Как изменить txt на python

Не получается txt сделать в py Python Решение и ответ на вопрос 2827023

1 / 1 / 0

Регистрация: 16.12.2020

Сообщений: 62

1

09.05.2021, 11:38. Показов 18134. Ответов 29


Делаю из txt в py ,но тхт все равно остается

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

09.05.2021, 11:38

29

Автоматизируй это!

Эксперт Python

6481 / 4174 / 1140

Регистрация: 30.03.2015

Сообщений: 12,329

Записей в блоге: 29

09.05.2021, 11:39

2

Aker05, теперь то же самое на русском, чтобы было понятно тем, кто не владеет телепатией



1



1 / 1 / 0

Регистрация: 16.12.2020

Сообщений: 62

09.05.2021, 11:40

 [ТС]

3

есть у меня текстовый документ с кодом, изменяю его с .txt на .py ,но после этих действий он все равно остается текстовым документом c форматом .txt



0



Автоматизируй это!

Эксперт Python

6481 / 4174 / 1140

Регистрация: 30.03.2015

Сообщений: 12,329

Записей в блоге: 29

09.05.2021, 11:42

4

Aker05, значит как то не так переименовываешь. Используй какой нибудь нотепад++ или пичарм. А еще лучше скопируй содержимое и вставь в файл пи.



1



Нарушитель

Эксперт PythonЭксперт Java

14046 / 8234 / 2485

Регистрация: 21.10.2017

Сообщений: 19,711

09.05.2021, 11:43

5

Welemir1, вангую, добавляет расшиерение .py к.txt-файлу, в винде со скрытыми зарегистрированными расширениями.



2



1 / 1 / 0

Регистрация: 16.12.2020

Сообщений: 62

09.05.2021, 11:52

 [ТС]

6

не получается , просто белый ярлык получается и когда открываешь предлогает открыть через блокнот или же что-то другое ,но только не командную строка

Добавлено через 37 секунд
это как ?



0



Нарушитель

Эксперт PythonЭксперт Java

14046 / 8234 / 2485

Регистрация: 21.10.2017

Сообщений: 19,711

09.05.2021, 11:52

7

Aker05, ебстественно. Винде нужно сказать — чем открывать файл .py



0



1 / 1 / 0

Регистрация: 16.12.2020

Сообщений: 62

09.05.2021, 11:53

 [ТС]

8

ну откроется он, а работать ведь не будет



0



Автоматизируй это!

Эксперт Python

6481 / 4174 / 1140

Регистрация: 30.03.2015

Сообщений: 12,329

Записей в блоге: 29

09.05.2021, 11:55

9

Aker05, а если почитать как запускать питон файлы? установить ИДЕ?



0



1 / 1 / 0

Регистрация: 16.12.2020

Сообщений: 62

09.05.2021, 11:59

 [ТС]

10

через идле сделал чтоб слово выводилось просто, сохраняю на рабочий стол и опять в блокнот превращается………



0



Нарушитель

Эксперт PythonЭксперт Java

14046 / 8234 / 2485

Регистрация: 21.10.2017

Сообщений: 19,711

09.05.2021, 12:00

11

Aker05, давай-ка по пунктам — чего ты хочешь добиться?



0



1 / 1 / 0

Регистрация: 16.12.2020

Сообщений: 62

09.05.2021, 12:05

 [ТС]

12

я хочу сделать файл с расширением .py ,но у меня это не получается т.к после того как я переименовываю .txt в .py или же сохраняю код с любых редакторов(например с sublime) на рабочий стол , то у меня на файле не ярлых питона(самого расширение питона тоже нет на файле) ,а ярлык блокнота и когда я захожу в этот файл, то открывается у меня тоже просто блокнот



0



Нарушитель

Эксперт PythonЭксперт Java

14046 / 8234 / 2485

Регистрация: 21.10.2017

Сообщений: 19,711

09.05.2021, 12:06

13

Переименуй тотал коммандером. Он показывает зарегистрированные расширения



0



1 / 1 / 0

Регистрация: 16.12.2020

Сообщений: 62

09.05.2021, 12:07

 [ТС]

14

откуда скачать посоветуешь?



0



Нарушитель

Эксперт PythonЭксперт Java

14046 / 8234 / 2485

Регистрация: 21.10.2017

Сообщений: 19,711

09.05.2021, 12:09

15

В гугле забанили?



0



Автоматизируй это!

Эксперт Python

6481 / 4174 / 1140

Регистрация: 30.03.2015

Сообщений: 12,329

Записей в блоге: 29

09.05.2021, 12:09

16

Aker05, не используй всякую ерунду типа идле или сублиме, установи PyCharm



1



Нарушитель

Эксперт PythonЭксперт Java

14046 / 8234 / 2485

Регистрация: 21.10.2017

Сообщений: 19,711

09.05.2021, 12:11

17

Welemir1, вангую, что питон в пат не прописан. Иначе винда зарегистрировала бы расширение.
Наверно.



1



1 / 1 / 0

Регистрация: 16.12.2020

Сообщений: 62

09.05.2021, 12:11

 [ТС]

18

он ругается на меня всегда ,я удалил его) и есть ли кряк где то без вирусов на пичарм?
?



0



Нарушитель

Эксперт PythonЭксперт Java

14046 / 8234 / 2485

Регистрация: 21.10.2017

Сообщений: 19,711

09.05.2021, 12:12

19

Aker05, качай Pycharm Community, он бесплатный



0



1 / 1 / 0

Регистрация: 16.12.2020

Сообщений: 62

09.05.2021, 12:13

 [ТС]

20

lite или powerpack?

Добавлено через 23 секунды
и что такое пат?



0



I need to update a text file whenever my IP address changes, and then run a few commands from the shell afterwards.

  1. Create variable LASTKNOWN = «212.171.135.53»
    This is the ip address we have while writing this script.

  2. Get the current IP address. It will change on a daily basis.

  3. Create variable CURRENT for the new IP.

  4. Compare (as strings) CURRENT to LASTKNOWN

  5. If they are the same, exit()

  6. If they differ,

    A. «Copy» the old config file (/etc/ipf.conf) containing LASTKNOWN IP address into /tmp
    B. Replace LASTKNOWN with CURRENT in the /tmp/ipf.conf file.
    C. Using subprocess «mv /tmp/ipf.conf /etc/ipf.conf»
    D. Using subprocess execute, «ipf -Fa -f /etc/ipf.conf»
    E. Using subprocess execute, «ipnat -CF -f /etc/ipnat.conf»

  7. exit()

I know how to do steps 1 through 6. I fall down on the «file editing» part, A -> C. I can’t tell what module to use or whether I should be editing the file in place. There are so many ways to do this, I can’t decide on the best approach. I guess I want the most conservative one.

I know how to use subprocess, so you don’t need to comment on that.

I don’t want to replace entire lines; just a specific dotted quad.

Thanks!

asked Oct 17, 2009 at 17:35

mr.zog's user avatar

3

Another way to simply edit files in place is to use the fileinput module:

import fileinput, sys
for line in fileinput.input(["test.txt"], inplace=True):
    line = line.replace("car", "truck")
    # sys.stdout is redirected to the file
    sys.stdout.write(line)

Eric's user avatar

Eric

93.9k52 gold badges236 silver badges365 bronze badges

answered Mar 2, 2010 at 14:43

Tim Jones's user avatar

Tim JonesTim Jones

9758 silver badges14 bronze badges

1

Replace LASTKNOWN by CURRENT in /etc/ipf.conf

Replace all at once

filename = "/etc/ipf.conf"
text = open(filename).read()
open(filename, "w").write(text.replace(LASTKNOWN, CURRENT))

Replace line by line

from __future__ import with_statement
from contextlib import nested

in_filename, outfilename = "/etc/ipf.conf", "/tmp/ipf.conf"
with nested(open(in_filename), open(outfilename, "w")) as in_, out:
     for line in in_:
         out.write(line.replace(LASTKNOWN, CURRENT))
os.rename(outfilename, in_filename)

Note: «/tmp/ipf.conf» should be replaced by tempfile.NamedTemporaryFile() or similar
Note: the code is not tested.

answered Oct 18, 2009 at 6:47

jfs's user avatar

jfsjfs

391k188 gold badges966 silver badges1647 bronze badges

3

fileinput module has very ugly API, I find beautiful module for this task — in_place, example for Python 3:

import in_place

with in_place.InPlace('data.txt') as file:
    for line in file:
        line = line.replace('test', 'testZ')
        file.write(line)

main difference from fileinput:

  • Instead of hijacking sys.stdout, a new filehandle is returned for writing.
  • The filehandle supports all of the standard I/O methods, not just readline().

for example — fileinput can line by line editing only, in_pace allow read whole file to memory (if it not big) and modify it.

answered Apr 17, 2018 at 8:53

Alexey Shrub's user avatar

Alexey ShrubAlexey Shrub

1,13612 silver badges21 bronze badges

2

You’re trying to «atomically» update the contents of a file, and there have been many delightful flame wars on the subject. But the general pattern is:

1) Write the new file to a temp file, and make sure you flush and close.

2) Use your operating system’s facilities to atomically rename the temp file to the old file.

Now, you simply can’t atomically rename a file in Windows, but it sounds like you’re on a unix-like system anyway. You atomically rename using os.rename().

answered Oct 17, 2009 at 17:47

Jonathan Feinberg's user avatar

Jonathan FeinbergJonathan Feinberg

44.2k6 gold badges79 silver badges103 bronze badges

8

Probably the simplest way would be to open a file using f=open(filename, mode). Then, read all the lines using f.readlines() (this will return a list of strings representing the lines of the program).

You can then search these strings to find the address and replace it with the new one (using standard string replacing, regular expressions, or whatever you want).

At the end, you can write the lines back to the file using f.writelines(lines), which conveniently takes back a list of lines.

NOTE: This is not an efficient way to do this, it’s just the easiest. Please

Example code:

f = open(filename, "r")
lines = f.readlines()

# Assume that change_ip is a function that takes a string and returns a new one with the ip changed): example below
ret_lines = [change_ip(lines) for line in lines]
new_file = open(new_filename, "w")
new_file.writelines(lines)

def change_ip(str):
   ''' Gets a string, returns a new string where the ip is changed '''
   # Add implementation, something like: return str.replace(old_ip, new_ip) or something similair.

answered Oct 17, 2009 at 17:45

Edan Maor's user avatar

Edan MaorEdan Maor

9,68217 gold badges62 silver badges92 bronze badges

10

After checking the comments and the bit of code that you put on pastebin, here is a working solution. To begin with, the file /tmp/iiiipf.conf contains:

Simply a test file 175.48.204.168

And two times 175.48.204.168 on this line 175.48.204.168

Done.

After running the code, the file /tmp/iiiipf.conf contains:

Simply a test file 10.73.144.112

And two times 10.73.144.112 on this line 10.73.144.112

Done.

And here is the tested working code with my stuff merged into your pastebin code:

import socket
import fileinput
import subprocess
import string
import re

CURRENT = socket.getaddrinfo(socket.gethostname(), None)[0][4][0]
LASTKNOWN = '175.48.204.168'

if CURRENT == LASTKNOWN:
    print 'Nevermind.'
    subprocess.sys.exit()

else:

    cf = open("/tmp/iiiipf.conf", "r")
    lns = cf.readlines()
    # close it so that we can open for writing later
    cf.close()

    # assumes LASTKNOWN and CURRENT are strings with dotted notation IP addresses
    lns = "".join(lns)
    lns = re.sub(LASTKNOWN, CURRENT, lns)  # This replaces all occurences of LASTKNOWN with CURRENT

    cf = open("/tmp/iiiipf.conf", "w")
    cf.write(lns)
    cf.close()

This bit of code will do what you need even if the IP address is used several times within the configuration file. It will also change it in comment lines.

This method does not require copying to /tmp and uses one less subprocess call when restarting the firewall and NAT.

answered Oct 17, 2009 at 18:37

Michael Dillon's user avatar

Michael DillonMichael Dillon

31.7k5 gold badges70 silver badges105 bronze badges

16

I need to update a text file whenever my IP address changes, and then run a few commands from the shell afterwards.

  1. Create variable LASTKNOWN = «212.171.135.53»
    This is the ip address we have while writing this script.

  2. Get the current IP address. It will change on a daily basis.

  3. Create variable CURRENT for the new IP.

  4. Compare (as strings) CURRENT to LASTKNOWN

  5. If they are the same, exit()

  6. If they differ,

    A. «Copy» the old config file (/etc/ipf.conf) containing LASTKNOWN IP address into /tmp
    B. Replace LASTKNOWN with CURRENT in the /tmp/ipf.conf file.
    C. Using subprocess «mv /tmp/ipf.conf /etc/ipf.conf»
    D. Using subprocess execute, «ipf -Fa -f /etc/ipf.conf»
    E. Using subprocess execute, «ipnat -CF -f /etc/ipnat.conf»

  7. exit()

I know how to do steps 1 through 6. I fall down on the «file editing» part, A -> C. I can’t tell what module to use or whether I should be editing the file in place. There are so many ways to do this, I can’t decide on the best approach. I guess I want the most conservative one.

I know how to use subprocess, so you don’t need to comment on that.

I don’t want to replace entire lines; just a specific dotted quad.

Thanks!

asked Oct 17, 2009 at 17:35

mr.zog's user avatar

3

Another way to simply edit files in place is to use the fileinput module:

import fileinput, sys
for line in fileinput.input(["test.txt"], inplace=True):
    line = line.replace("car", "truck")
    # sys.stdout is redirected to the file
    sys.stdout.write(line)

Eric's user avatar

Eric

93.9k52 gold badges236 silver badges365 bronze badges

answered Mar 2, 2010 at 14:43

Tim Jones's user avatar

Tim JonesTim Jones

9758 silver badges14 bronze badges

1

Replace LASTKNOWN by CURRENT in /etc/ipf.conf

Replace all at once

filename = "/etc/ipf.conf"
text = open(filename).read()
open(filename, "w").write(text.replace(LASTKNOWN, CURRENT))

Replace line by line

from __future__ import with_statement
from contextlib import nested

in_filename, outfilename = "/etc/ipf.conf", "/tmp/ipf.conf"
with nested(open(in_filename), open(outfilename, "w")) as in_, out:
     for line in in_:
         out.write(line.replace(LASTKNOWN, CURRENT))
os.rename(outfilename, in_filename)

Note: «/tmp/ipf.conf» should be replaced by tempfile.NamedTemporaryFile() or similar
Note: the code is not tested.

answered Oct 18, 2009 at 6:47

jfs's user avatar

jfsjfs

391k188 gold badges966 silver badges1647 bronze badges

3

fileinput module has very ugly API, I find beautiful module for this task — in_place, example for Python 3:

import in_place

with in_place.InPlace('data.txt') as file:
    for line in file:
        line = line.replace('test', 'testZ')
        file.write(line)

main difference from fileinput:

  • Instead of hijacking sys.stdout, a new filehandle is returned for writing.
  • The filehandle supports all of the standard I/O methods, not just readline().

for example — fileinput can line by line editing only, in_pace allow read whole file to memory (if it not big) and modify it.

answered Apr 17, 2018 at 8:53

Alexey Shrub's user avatar

Alexey ShrubAlexey Shrub

1,13612 silver badges21 bronze badges

2

You’re trying to «atomically» update the contents of a file, and there have been many delightful flame wars on the subject. But the general pattern is:

1) Write the new file to a temp file, and make sure you flush and close.

2) Use your operating system’s facilities to atomically rename the temp file to the old file.

Now, you simply can’t atomically rename a file in Windows, but it sounds like you’re on a unix-like system anyway. You atomically rename using os.rename().

answered Oct 17, 2009 at 17:47

Jonathan Feinberg's user avatar

Jonathan FeinbergJonathan Feinberg

44.2k6 gold badges79 silver badges103 bronze badges

8

Probably the simplest way would be to open a file using f=open(filename, mode). Then, read all the lines using f.readlines() (this will return a list of strings representing the lines of the program).

You can then search these strings to find the address and replace it with the new one (using standard string replacing, regular expressions, or whatever you want).

At the end, you can write the lines back to the file using f.writelines(lines), which conveniently takes back a list of lines.

NOTE: This is not an efficient way to do this, it’s just the easiest. Please

Example code:

f = open(filename, "r")
lines = f.readlines()

# Assume that change_ip is a function that takes a string and returns a new one with the ip changed): example below
ret_lines = [change_ip(lines) for line in lines]
new_file = open(new_filename, "w")
new_file.writelines(lines)

def change_ip(str):
   ''' Gets a string, returns a new string where the ip is changed '''
   # Add implementation, something like: return str.replace(old_ip, new_ip) or something similair.

answered Oct 17, 2009 at 17:45

Edan Maor's user avatar

Edan MaorEdan Maor

9,68217 gold badges62 silver badges92 bronze badges

10

After checking the comments and the bit of code that you put on pastebin, here is a working solution. To begin with, the file /tmp/iiiipf.conf contains:

Simply a test file 175.48.204.168

And two times 175.48.204.168 on this line 175.48.204.168

Done.

After running the code, the file /tmp/iiiipf.conf contains:

Simply a test file 10.73.144.112

And two times 10.73.144.112 on this line 10.73.144.112

Done.

And here is the tested working code with my stuff merged into your pastebin code:

import socket
import fileinput
import subprocess
import string
import re

CURRENT = socket.getaddrinfo(socket.gethostname(), None)[0][4][0]
LASTKNOWN = '175.48.204.168'

if CURRENT == LASTKNOWN:
    print 'Nevermind.'
    subprocess.sys.exit()

else:

    cf = open("/tmp/iiiipf.conf", "r")
    lns = cf.readlines()
    # close it so that we can open for writing later
    cf.close()

    # assumes LASTKNOWN and CURRENT are strings with dotted notation IP addresses
    lns = "".join(lns)
    lns = re.sub(LASTKNOWN, CURRENT, lns)  # This replaces all occurences of LASTKNOWN with CURRENT

    cf = open("/tmp/iiiipf.conf", "w")
    cf.write(lns)
    cf.close()

This bit of code will do what you need even if the IP address is used several times within the configuration file. It will also change it in comment lines.

This method does not require copying to /tmp and uses one less subprocess call when restarting the firewall and NAT.

answered Oct 17, 2009 at 18:37

Michael Dillon's user avatar

Michael DillonMichael Dillon

31.7k5 gold badges70 silver badges105 bronze badges

16

Диля


  • #1

Хочу изменить TXT на РУ, но когда создаю текстовый документ, у меня рядом не отображается «имя файла.txt», как в видео через которое я учусь. А просто «имя файла». Как мне изменить тип файла другим путем?

  • #2

когда создаю текстовый документ

как это делаете? и нет такого понятия создаю-не рафаэль однако, есть понятие открываю, если он не существует он будет создан
для вас это тоже самое, что и создаю

Vershitel_sudeb


  • #3

как это делаете? и нет такого понятия создаю-не рафаэль однако, есть понятие открываю, если он не существует он будет создан
для вас это тоже самое, что и создаю

Ты не понял, он просто файл создаёт чтобы код в нем писать, а не функцией open

  • #4

Как мне изменить тип файла другим путем?

тогда видимо вручную, после того, когда он будет создан

  • #5

Хочу изменить TXT на РУ, но когда создаю текстовый документ, у меня рядом не отображается «имя файла.txt», как в видео через которое я учусь. А просто «имя файла». Как мне изменить тип файла другим путем?

через тотал командер, или включить отображение формата файлов в проводнике

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

Для примера представим программу Python, которая проверяет список пользователей для контроля доступа. Список пользователей, вероятно, будет храниться в текстовом файле. Ещё один пример: программа для выполнения финансового анализа получает вводные данные из сохраненной таблицы. Как видите, вне зависимости от приложения, входные и выходные данные задействованы практически всегда.

В данном руководстве речь идёт о типах форматов, которые поддерживает Python 3. Также руководство научит вас обрабатывать текстовые файлы.

Требования

Для выполнения руководства вам понадобится предварительно настроенная среда Python 3. Все необходимые инструкции вы найдёте в следующих статьях:

Форматы файлов в Python 3

Python очень гибкий и может относительно легко обрабатывать множество различных форматов файлов. Вот основные форматы:

Формат Описание
txt Обычный текстовый файл, который хранит данные в виде символов (или строк) и исключает структурированные метаданные.
CSV Файл, который хранит данные в виде таблицы; для структурирования хранимых данных используются запятые (или другие разделители).
HTML Файл Hypertext Markup Language хранит структурированные данные; такие файлы используются большинством сайтов.
JSON Простой файл JavaScript Object Notation, один из наиболее часто используемых форматов для хранения и передачи данных.

Данное руководство рассматривает только формат txt.

1: Создание текстового файла

Сначала нужно создать тестовый файл для работы. Откройте текстовый редактор и создайте файл days.txt. Добавьте в новый файл список дней недели:

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Сохраните файл и запомните его местонахождение (это нужно для дальнейшей работы). В данном случае файл будет храниться в каталоге /users/8host/days.txt.

2: Открытие файла

Создайте сценарий files.py в текстовом редакторе и для простоты сохраните его в тот же каталог (/users/8host/).

Чтобы открыть файл в Python, нужно связать файл на диске с переменной Python. Сначала сообщите Python, где находится нужный файл. Чтобы открыть какой-либо файл, Python должен знать путь к этому файлу. Путь к файлу days.txt выглядит так: /users/8host/days.txt.

В файле files.py создайте переменную path и укажите в ней путь к файлу days.txt.

Теперь можно использовать функцию open(), чтобы открыть файл days.txt. В качестве первого аргумента функция open() требует путь к файлу, который нужно открыть. Эта функция имеет много других параметров. Одним из основных параметров является режим; это опциональная строка, которая позволяет выбрать режим открытия файла:

  • ‘r’: открыть файл для чтения (опция по умолчанию).
  • ‘w’: открыть файл для записи.
  • ‘x’: создать новый файл и открыть его для записи.
  • ‘a’: вставить в файл.
  • ‘r+’: открыть файл для чтения и записи.

Попробуйте открыть файл для чтения. Для этого создайте переменную days_file и задайте в ней опцию open() и режим ‘r’, чтобы открыть файл days.txt только для чтения.

3: Чтение файла

Теперь вы можете работать с файлом. В зависимости от режима, в котором открыт файл, вы можете выполнить в нём те или иные действия. Для чтения информации Python предлагает три взаимосвязанные операции.

Первая операция – <file>.read(). Она возвращает все содержимое файла в виде одной строки.

Вторая операция – <file>.readline(), которая возвращает содержимое файла построчно.

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

Третья операция – <file>.readlines(), она возвращает список строк, где строки представлены в виде отдельных элементов.

days_file.readlines()
[‘Mondayn’, ‘Tuesdayn’, ‘Wednesdayn’, ‘Thursdayn’, ‘Fridayn’, ‘Saturdayn’, ‘Sundayn’]

Читая файлы в Python, важно помнить следующее: если файл был прочитан с помощью одной из операций чтения, его нельзя прочитать снова. К примеру, если вы запустили days_file.read(), а затем days_file.readlines(), вторая операция вернёт пустую строку. Потому нужно открывать новую переменную файла всякий раз, когда вы хотите прочитать данные из файла.

4: Запись в файл

Теперь попробуйте создать новый файл, который будет включать заголовок Days of the Week. Сначала создайте переменную title в файле files.py.

title = ‘Days of the Weekn’

Сохраните дни недели в строковой переменной days. Ниже показан код из всех вышеупомянутых разделов (чтобы было понятнее); файл открывается в режиме чтения, выходные данные операции чтения сохраняются в новой переменной days.

path = ‘/users/8host/days.txt’
days_file = open(path,’r’)
days = days_file.read()

В файле есть переменные для заголовка и содержимого файла days. Теперь можно записать данные в новый файл. Сначала укажите местонахождение файла (/users/8host/), затем – название нового файла (например, new_days.txt). Путь к новому файлу можно указать в переменной new_path. Чтобы открыть новый файл для записи, используйте функцию open() с параметром ‘w’.

new_path = ‘/users/8host/new_days.txt’
new_days = open(new_path,’w’)

Примечание: Если файл с таким именем (new_days.txt) уже существует, при открытии в режиме ‘w’ его содержимое пострадает.

Функция откроет файл, после чего вы можете записать в него данные с помощью операции <file>.write(). Операции записи необходим всего один параметр – строка, которую нужно записать в файл. Чтобы начать новую строку в файле, нужно явно использовать символ новой строки. Запишите в файл files.py заголовок и добавьте пару операторов print.

new_days.write(title)
print(title)
new_days.write(days)
print(days)

После этого нужно закрыть файл.

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

Операция закрытия файла прерывает соединение между файлом на диске и переменной. Закрытые файлы могут использоваться другими программами, кроме того, это обеспечивает безопасность данных. закрыть файл можно с помощью функции <file>.close(). Добавьте в файл files.py:

6: Проверка кода

Прежде чем запустить сценарий files.py, убедитесь, что его содержимое выглядит так:

path = ‘/users/8host/days.txt’
days_file = open(path,’r’)
days = days_file.read()
new_path = ‘/users/8host/new_days.txt’
new_days = open(new_path,’w’)
title = ‘Days of the Weekn’
new_days.write(title)
print(title)
new_days.write(days)
print(days)
days_file.close()
new_days.close()

Сохраните код, откройте терминал и запустите сценарий Python:

В терминале появится вывод:

Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Теперь попробуйте открыть файл new_days.txt. Если всё работает должным образом, файл будет выглядеть так:

Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Заключение

Теперь вы умеете обрабатывать и управлять простыми текстовыми файлами в Python 3: открывать и читать файлы, записывать в них новые данные и закрывать их.

Работа с файлами в Питоне

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

Python умеет взаимодействовать со следующими форматами файлов: txt, jpg, csv, json, html, xlsx, pdf и целым рядом других. Удобство заключается в том, что для каждого случая есть отдельный модуль, ускоряющий разработку.

В данной статье в формате «how to» рассмотрим основной инструментарий для осуществления работы с документами различных типов в Python.

Виртуальная среда под проекты

Язык Python удобен тем, что может взаимодействовать с разными проектами при различных настройках. Как сказал создатель протокола BitTorrent Брэм Коен:

«Питон удобен своей простотой и удобным синтаксисом. Он позволяет инкапсулировать код, имеет широкую поддержку и опциональные параметры»

https://www.inspiringquotes.us/quotes/rHcs_LYZ8MvJh

Важно то, что инкапсуляция работает не только на уровне объектов и классов, но и в масштабах самого языка. Мы можем создавать проекты с отличающимися настройками, и они не будут друг другу «мешать».

Хорошей практикой считается активация виртуальной среды под конкретную проблему. Другими словами, устанавливать библиотеки нужно не глобально, для всей операционной системы, а для отдельного проекта. В этом помогает виртуальное окружение. Прежде чем переходить к написанию кода, нужно сформировать окружение проекта.

В Windows это делается следующим образом (в нужной папке открываем терминал и прописываем команды):

Вначале мы создаем папку виртуального окружения «.venv» (имя может быть любым), а затем активируем ее. Теперь все, что мы установим, будет связано только с данным проектом.

В UNIX-системах (Linux, MacOS) команды будут такими:

Открытие и чтение текстового файла

Для этого в Питоне имеются следующие конструкции:

  • Функция open() – открывает документ в виде файлового объекта;
  • Функция close() – закрывает файл и удаляет его из оперативной памяти;
  • Контекстный менеджер with (автоматически очищает память после работы с файлом). Его синтаксис показан на рисунке ниже.
  • Метод read() – считывает документ полностью или частично в виде строки;
  • Метод readline() – построчно выводит содержимое объекта;
  • Метод readlines() – формирует из строк файла список.

В папке проекта создадим текстовый документ «econ.txt» с таким наполнением:

Писать код будем в IDE PyCharm (среду разработки скачиваем с официального сайта).

Режимы работы с документом

Вторым параметром в функцию open() передается режим работы с файлом. Охарактеризуем их (таблица 1).

Режим Характеристика
r Открыть для чтения
w Открыть для записи (если такого документа не существует, то он будет создан)
a Дописать новое содержимое в файл в дополнение к имеющемуся
x Открыть для записи в несуществующий файл
t Представить контент как текст
+ Открыть документ как для чтения, так и записи
b Представить контент в виде байтов

Таблица 1 – Режимы открытия файла

Если данный аргумент не передать, то файл по умолчанию будет отображаться в виде текста в режиме чтения. Кодировку указывать всегда обязательно, так как содержимое может предстать в виде нечитаемой «каши» символов.

Запись текстового контента в файл

Питон позволяет дозаписывать данные в документ или наполнить его новой информацией. В режиме «w» файл всегда будет перезаписываться полностью.

Запись текста возможна двумя способами:

  • Через функцию write(),
  • При помощи функции print().

Первая операция создает файл и записывает в него строчку «Python». Если он существует, то вызовется ошибка FileExistsError. Это своего рода защита от перезаписи.

Вторая операция добавит новую строку в документ. Теперь в нем будет две строки: «Python» и «is great».

В третьем случае старые данные из «somеtext.txt» удалятся, а вместо них будет внедрена новая строчка «Program».

Таким образом, если требуется дозаписывать информацию в файл, то используем режим «a», в противном случае ограничиваемся режимом «w».

Чтение и запись json-файлов

Для работы с json-объектами предусмотрен встроенный модуль json. Его нужно импортировать для начала.

Практически все объекты Питона можно безболезненно преобразовывать в json-сущности.

В библиотеке json имеется 4 основные функции (таблица 2).

Функция Характеристика
dumps() Преобразовывает объекты Питона в json
dump() Записывает преобразованные в json-формат данные в файл
loads() Преобразовывает json-данные в словарь
load() Считывает содержимое json-файла и делает из них словарь

Таблица 2 – Ключевые функции модуля json

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

Создадим на ПК документ «my.json» с таким содержимым:

Теперь считаем их и представим в виде словаря Python.

Как видно, десериализация json-данных осуществляется следующим образом:

  • Двойные кавычки преобразованы в одинарные;
  • Булево значение false превратилось в False;
  • Объект null соответствует значению None в Питоне.

А теперь расширим информацию в документе «my.json», добавив еще одного студента.

Открываем файл в режиме чтения и возможности записи («r+»). Считываем имеющееся в нем содержимое и преобразуем его в словарь. Добавляем новую запись в словарь с ключом «student2». Полностью переписываем содержимое документа с учетом новой информации: делаем отступы (indent=4) для удобства чтения, а также отключаем режим «только ASCII», чтобы появилась возможность вставлять кириллицу.

Запись excel-файлов

Для сохранения табличных данных удобнее всего пользоваться библиотекой csv, так как с этим форматом работать проще, он быстрее, может открываться без наличия Excel на рабочем компьютере.

Конечно, бывают ситуации, когда может потребоваться поработать именно с файлами формата «xlsx», для чего подойдет модуль openpyxl. Сначала установим данную библиотеку, так как она не встроена в Питон по умолчанию:

С ее помощью можно читать и записывать данные в «эксель»-файлы.

Основные инструменты, с которыми будем работать:

  • Workbook() – класс для создания табличного файла;
  • Create_sheet() – внедрение страницы с определенным именем;
  • Save() – сохранение результата в файл;
  • Cell() – запись информации в ячейку;
  • Get_column_letter() – получение буквенного обозначения колонки.

В результате в созданном файле будем иметь следующее содержимое (рисунок 2).

Запись в файл Питон

Рисунок 2 – Результат наполнения xlsx-файла

Также вкладка получит название «Запись».

Файлы операционной системы

Встроенный модуль os позволяет просматривать содержимое каталогов и редактировать его.

Ознакомимся со следующими функциями:

  • mkdir() – создание папки в выбранном каталоге;
  • walk() – определение списка всех файлов и директорий внутри заданной и ее подпапках;
  • remove() – удаление файла из системы;
  • rename() – переименование документа и пр.

Приведем несколько примеров работы с библиотекой.

В результате работы программы в папке «temp» окажутся следующие файлы: ‘0.txt’, ‘2.txt’, ‘4.txt’, ‘5.txt’, ‘6.txt’, ‘первый.txt’.

Редактирование изображений в Питоне

Для работы с картинками используют внешний модуль Pillow. Он позволяет создавать и изменять рисунки, а также накладывать на них текст.

В первую очередь следует установить модуль:

Нарисуем квадрат красного цвета с длиной стороны 400 пикселей, применим к нему фильтр размытия, а затем сделаем его черно-белым.

Python: создание файла Рисунок 3 – Красный квадрат Как открыть файл в Питоне Рисунок 4 – Размытие картинки Работа с файлами Питон Рисунок 5 – Преобразование в черно-белый цвет

Заключение

Мы рассмотрели лишь часть возможностей Питона по работе с файлами. Создание, считывание, вывод в файлы может осуществляться разными способами. Более того, практически все форматы и типы документов могут редактироваться при помощи Python. В зависимости от задачи найти нужный модуль не составит труда.

Ответы на вопросы читателей

Универсальный формат табличной информации – csv (Comma Separated Values, разделенные запятой данные). Его хорошо понимают разные сайты, среды разработки, операционные системы.

Чтобы взаимодействовать с excel-файлами требуется установить модуль openpyxl.

Для работы с Гугл-таблицами нужно получить доступ к программному интерфейсу в качестве разработчика.

Информация на Интернет-ресурсах зачастую представлена в виде json-данных. Она очень напоминает словари (dictionaries) в Питоне. Именно поэтому работать с этим форматом очень удобно.

Он используется для передачи и получения информации между API сайтов и программ.

После создания файлового объекта его можно прочитать полностью и вывести на печать.

Создание/изменение документов MS Word на Python.

Модуль python-docx предназначен для создания и обновления файлов с расширением .docx — Microsoft Word. Этот модуль имеет одну зависимость: сторонний модуль lxml .

Установка модуля python-docx в виртуальное окружение.

Модуль python-docx размещен на PyPI, поэтому установка относительно проста.

Основы работы с файлами Microsoft Word на Python.

    ; ; ; ; ; ;

    • Пользовательский стиль символов текста;

    Открытие/создание документа.

    Первое, что вам понадобится, это документ, над которым вы будете работать. Самый простой способ:

    При этом создается пустой документ, основанный на «шаблоне» по умолчанию. Другими словами, происходит примерно то же самое, когда пользователь нажимает на иконку в Microsoft Word «Новый документ» с использованием встроенных значений по умолчанию.

    При этом шрифт документа и его размер по умолчанию для всего документа можно задать следующим образом:

    Так же, можно открывать существующий документ Word и работать с ним при помощи модуля python-docx . Для этого, в конструктор класса Document() необходимо передать путь к существующему документу Microsoft Word.

    Добавление заголовка документа.

    В любом документе, основной текст делится на разделы, каждый из которых начинается с заголовка. Название таких разделов можно добавить методом Document.add_heading() :

    По умолчанию, добавляется заголовок верхнего уровня, который отображается в Word как «Heading 1». Если нужен заголовок для подраздела, то просто указываем желаемый уровень в виде целого числа от 1 до 9:

    Если указать level=0 , то будет добавлен текст с встроенным стилем титульной страницы. Такой стиль может быть полезен для заголовка относительно короткого документа без отдельной титульной страницы.

    Так же, заголовки разделов можно добавлять методом document.add_paragraph().add_run() , с указанным размером шрифта.

    Добавление абзаца.

    Абзацы в Word имеют основополагающее значение. Они используются для добавления колонтитулов, основного текста, заголовков, элементов списков, картинок и т.д.

    Смотрим самый простой способ добавить абзац/параграф:

    Метод Document.add_paragraph() возвращает ссылку на только что добавленный абзац (объект Paragraph ). Абзац добавляется в конец документа. Эту ссылку можно использовать в качестве своеобразного «курсора» и например, вставить новый абзац прямо над ним:

    Такое поведение позволяет вставить абзац в середину документа, это важно при изменении существующего документа, а не при его создании с нуля.

    Ссылка на абзац, так же используется для его форматирования встроенными в MS Word стилями или для кастомного/пользовательского форматирования.

    Пользовательское форматирование абзаца.

    Форматирование абзацев происходит при помощи объекта ParagraphFormat .

    Простой способ форматировать абзац/параграф:

    Чтобы узнать, какие параметры абзаца еще можно настроить/изменить, смотрите материал «Объект ParagraphFormat «

    Очень часто в коде, с возвращенной ссылкой (в данном случае p ) ничего делать не надо, следовательно нет смысла ее присваивать переменной.

    Применение встроенного стиля в Microsoft Word к абзацу.

    Стиль абзаца — это набор правил форматирования, который заранее определен в Microsoft Word, и храниться в редакторе в качестве переменной. По сути, стиль позволяет сразу применить к абзацу целый набор параметров форматирования.

    Можно применить стиль абзаца, прямо при его создании:

    В конкретном стиле ‘List Bullet’ , абзац отображается в виде маркера. Также можно применить стиль позже. Две строки, в коде ниже, эквивалентны примеру выше:

    Стиль указывается с использованием его имени, в этом примере имя стиля — ‘List’ . Как правило, имя стиля точно такое, как оно отображается в пользовательском интерфейсе Word.

    Обратите внимание, что можно установить встроенный стиль прямо на результат document.add_paragraph() , без использования возвращаемого объекта paragraph

    Жирный, курсив и подчеркнутый текст в абзаце.

    Разберемся, что происходит внутри абзаца:

    • Абзац содержит все форматирование на уровне блока, такое как — отступ, высота строки, табуляции и так далее.
    • Форматирование на уровне символов, например полужирный и курсив, применяется на уровне прогона paragraph.add_run() . Все содержимое абзаца должно находиться в пределах цикла, но их может быть больше одного. Таким образом, для абзаца с полужирным словом посередине требуется три прогона: обычный, полужирный — содержащий слово, и еще один нормальный для текста после него.

    Когда создается абзац методом Document.add_paragraph() , то передаваемый текст добавляется за один прогон Run . Пустой абзац/параграф можно создать, вызвав этот метод без аргументов. В этом случае, наполнить абзац текстом можно с помощью метода Paragraph.add_run() . Метод абзаца .add_run() можно вызывать несколько раз, тем самым добавляя информацию в конец данного абзаца:

    В результате получается абзац, который выглядит так же, как абзац, созданный из одной строки. Если не смотреть на полученный XML, то не очевидно, где текст абзаца разбивается на части. Обратите внимание на конечный пробел в конце первой строки. Необходимо четко указывать, где появляются пробелы в начале и в конце прогона, иначе текст будет слитный (без пробелов). Они (пробелы) автоматически не вставляются между прогонами paragraph.add_run() . Метод paragraph.add_run() возвращает ссылку на объект прогона Run , которую можно использовать, если она нужна.

    Объекты прогонов имеют следующие свойства, которые позволяют установить соответствующий стиль:

    • .bold : полужирный текст;
    • .underline : подчеркнутый текст;
    • .italic : курсивный (наклонный) текст;
    • .strike : зачеркнутый текст.

    Получится текст, что то вроде этого: «Абзац содержит форматирование на уровне блока».

    Обратите внимание, что можно установить полужирный или курсив прямо на результат paragraph.add_run() , без использования возвращаемого объекта прогона:

    Передавать текст в метод Document.add_paragraph() не обязательно. Это может упростить код, если строить абзац из прогонов:

    Пользовательское задание шрифта прогона.

    Применение стилей Microsoft Word к символам текста (к прогону).

    В дополнение к встроенным стилям абзаца, которые определяют группу параметров уровня абзаца, Microsoft Word имеет стили символов, которые определяют группу параметров уровня прогона paragraph.add_run() . Другими словами, можно думать о стиле текста как об указании шрифта, включая его имя, размер, цвет, полужирный, курсив и т. д.

    Подобно стилям абзацев, стиль символов текста будет определен в документе, который открывается с помощью вызова Document() (см. Общие сведения о стилях).

    Стиль символов можно указать при добавлении нового прогона:

    Также можете применить стиль к прогону после его добавления. Этот код дает тот же результат, что и строки выше:

    Как и в случае со стилем абзаца, имя стиля текста такое, как оно отображается в пользовательском интерфейсе Word.

    Пользовательский стиль символов текста.

    Добавление разрыва страницы.

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

    Если вы обнаружите, что используете это очень часто, это, вероятно, знак того, что вы могли бы извлечь выгоду, лучше разбираясь в стилях абзацев. Одно свойство стиля абзаца, которое вы можете установить, — это разрыв страницы непосредственно перед каждым абзацем, имеющим этот стиль. Таким образом, вы можете установить заголовки определенного уровня, чтобы всегда начинать новую страницу. Подробнее о стилях позже. Они оказываются критически важными для получения максимальной отдачи от Word.

    Жесткий разрыв страницы можно привязать к стилю абзаца, и затем применять его для определенных абзацев, которые должны начинаться с новой страницы. Так же можно установить жесткий разрыв на стиль заголовка определенного уровня, чтобы с него всегда начинать новую страницу. В общем, стили, оказываются критически важными для того, чтобы получить максимальную отдачу от модуля python-docx .

    Добавление картинки в документ.

    Microsoft Word позволяет разместить изображение в документе с помощью пункта меню «Вставить изображение«. Вот как это сделать при помощи модуля python-docx :

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

    Размер изображения.

    По умолчанию, изображение добавляется с исходными размерами, что часто не устраивает пользователя. Собственный размер рассчитывается как px/dpi . Таким образом, изображение размером 300×300 пикселей с разрешением 300 точек на дюйм появляется в квадрате размером один дюйм. Проблема в том, что большинство изображений не содержат свойства dpi , и по умолчанию оно равно 72 dpi. Следовательно, то же изображение будет иметь одну сторону, размером 4,167 дюйма, что означает половину страницы.

    Чтобы получить изображение нужного размера, необходимо указывать его ширину или высоту в удобных единицах измерения, например, в миллиметрах или сантиметрах:

    Если указать только одну из сторон, то модуль python-docx использует его для вычисления правильно масштабированного значения другой стороны изображения. Таким образом сохраняется соотношение сторон и изображение не выглядит растянутым.

    Классы Mm() и Cm() предназначены для того, чтобы можно было указывать размеры в удобных единицах. Внутри python-docx используются английские метрические единицы, 914400 дюймов. Так что, если просто указать размер, что-то вроде width=2 , то получится очень маленькое изображение. Классы Mm() и Cm() импортируются из подпакета docx.shared . Эти классы можно использовать в арифметике, как если бы они были целыми числами. Так что выражение, width=Mm(38)/thing_count, работает нормально.

    Чтение документов Microsoft Word.

    В модуле python-docx , структура документа Microsoft Word представлена тремя различными типами данных. На самом верхнем уровне объект Document() представляет собой весь документ. Объект Document() содержит список объектов Paragraph() , которые представляют собой абзацы документа. Каждый из абзацев содержит список, состоящий из одного или нескольких объектов Run() , представляющих собой фрагменты текста с различными стилями форматирования.

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

Создание файла, его открытие и закрытие

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

Что касается режима обработки файла, то при его выборе учитывайте его назначение («r» — для чтения, «w» — для записи). Таблица ниже позволит вам ознакомиться с режимами доступа к файлу в Python:

1-20219-89defb.png

А вот пример простейшего взаимодействия с текстовым документом:

file = open("otus.txt", "w")
file.write("hello world")
file.close()

Здесь функция open принимает относительный путь, открывая его для записи. При этом, если в папке файл otus.txt будет отсутствовать, метод open создает его автоматически, после чего откроет для него нужный режим обработки.

Метод close закрывает файл, а это необходимо сделать, выполнив нужные вам действия с переменной file (иначе потеряете информацию). Впрочем, можно обойтись и без close, используя связку операторов with as (переменная, которая ссылается на файл, должна быть прописана после конструкции):

with open("otus.txt", "w") as file:
    file.write("hello world")

Метод write() для записи в файл в Python

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

Запись в файл построчно выполняется посредством записи нужной вам строки с последующей записью n— символа перевода строки.

Давайте ещё раз посмотрим на запись в файл с помощью метода write().
Синтаксис:


Пример использования:

    my_file = open("otus.txt", "w")
my_file.write("Люблю Python!nЭто крутой язык!")
my_file.close()

Код, представленный выше, создаст файл otus.txt , записав в него указанную строку.

Давайте теперь выполним запись списка поэлементно, где каждый элемент списка будет записан в новой строке:

lines = ["one", "two", "three"]
with open(r"C:otus.txt", "w") as file:
    for  line in lines:
        file.write(line + 'n')

Этот код позволит создать небольшой массив lines, содержащий три строковых элемента: «one», «two» и «three». Благодаря функции open и связке операторов with as произойдёт открытие текстового файла otus.txt в корневом каталоге жёсткого диска C. Далее произойдёт запись всех элементов списка с помощью write. Символ n обеспечит, чтобы каждая запись была выполнена с новой строки.

Понравилась статья? Поделить с друзьями:
  • Как изменить txt на pas
  • Как изменить ttl микротик
  • Как изменить txt на json
  • Как изменить ttl win 10
  • Как изменить txt на exe windows 10