Ввод-вывод в Python

Стандартные потоки ввода и вывода

Чтобы считать одно число из стандартного потока ввода, можно использовать, например, следующий код:
n = int(input())

Пример программы, которая принимает последовательность чисел и выводит их сумму:
n = int(input())
count = 0 total= 0 while (count < n): count = count + 1 total = total + int(input()) print(total)


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

  • С помощью функции os.listdir мы можем перечислить файлы и папки, которые содержатся в какой-нибудь папке. 
  • Чтобы узнать какая папка является текущей можно использоваться функцию os.getcwd
  • Существование файла проверяется функцией os.path.exists, эта функция работает не только для файлов, но и для директорий. 
  • С помощью функции os.path.isdir можно проверить чем является путь. 
  • С помощью функции os.path.abspath можно узнать абсолютный путь по относительному.
  • Сменить текущую папку можно функцией os.chdir.
import os
import os.path

print(os.getcwd())  # текущая папка
print(os.listdir())  # перечислить файлы и папки, которые содержатся в текущей папке
print(os.listdir(".idea"))

# Существование файла проверяется функцией os.path.exists
print(os.path.exists("files.py"))
print(os.path.exists("random.py"))

# Проверить чем является путь
print(os.path.isdir("files.py"))
print(os.path.isdir(".idea"))

print(os.path.abspath("files.py"))  # узнать абсолютный путь по относительному

os.chdir(".idea")  # cменить текущую папку
print(os.getcwd())

Функция os.walk позволяет рекурсивно пройтись по всем папкам и подпапкам. Функция os.walk на самом деле возвращает генератор. Каждый раз генератор возвращает кортеж из трех элементов: 
  • строковое представление текущей директории, которую он осматривает; 
  • список из всех подпапок, которые есть в данной директории;
  • список из всех файлов, которые есть в данной директории.
import os
import os.path

for current_dir, dirs, files in os.walk("."):
    print(current_dir, dirs, files)

Для копирования файлов и папок используется библиотека shutil:
import os
import os.path
import shutil

shutil.copy("tests/test1.txt", "tests/test2.txt")  # копировать файл
shutil.copytree("tests/", "tests/tests")  # копировать папку tests внутрь себя же

for current_dir, dirs, files in os.walk("."):
    print(current_dir, dirs, files)


Текстовые файлы

Чтение текстовых файлов

Краткий список режимов, в которых можно открыть файл:


Можно сочетать данные режимы, например "rb" чтобы открыть файл для чтения в бинарном формате.

Функция open возвращает file object, который после работы надо закрывать. Потому что нужно освобождать системные ресурсы, которые были затрачены на соединение с файлом.

f = open("test.txt", "r")  # открыть файл на чтение

x = f.read(5)
print(x)  # First

y = f.read()
# представление в качестве строки
print(repr(y))  # ' line\nSecond line\nThird line'

z = y.splitlines()
print(repr(z))  # [' line', 'Second line', 'Third line']

f.close()

Можно считывать файл построчно:
f = open("test.txt", "r")  # открыть файл на чтение

x = f.readline()
# убирает справа все ведущие пробельные символы, в том числе перенос строки
x = x.rstrip()  
print(repr(x))  # 'First line' 

x = f.readline()
print(repr(x))  # 'Second line\n'

f.close()

Более каноничным способом перебора строк внутри файлов является итерация по объекту файла. Этот файл написан эффективно по памяти, т.е. он никогда не выгружает файл в память целиком и считывает файл до тех пор пока не встретит следующий перенос строки.
f = open("test.txt", "r")  # открыть файл на чтение

for line in f:
    line = line.rstrip()
    print(repr(line))

x = f.read()
print(repr(x))  # ''

f.close()
Когда в файле не осталось информации, то метод read будет возвращать пустую строку.

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

f = open("test1.txt", "w")
f.write("Hello\n")
f.write("World\n")
f.close()

Частой техиникой для записи строк является использование функции join:
f = open("test1.txt", "w")
lines = ["Line 1", "Line 2", "Line 3"]
contents = "\n".join(lines)
f.write(contents)
f.close()

Дозапись в конец файла:
f = open("test_append.txt", "a")
f.write("Hello\n")
f.close()

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

В языке Python действительно важно закрывать файлы. Однако от того момента, где мы файл открыли до того момента, где мы должны были файл закрыть, могла бы произойти ошибка и интерпретатор мог просто не дойти до вызова метода close. Чтобы обезопасить себя мы можем использовать конструкцию open вместе с конструкцией with.
with open("test.txt") as f:
    for line in f:
        line = line.rstrip()
        print(line)

Можно открыть сразу несколько файлов:
with open("test.txt") as f, open("test_copy.txt", "w") as w:
    for line in f:
        w.write(line)

Графические файлы

Pillow - библиотека языка Python, предназначенная для работы с растровой графикой.

Музыкальные файлы

Для работы с музыкальными данным можно начать с встроенной библиотеки wave, а закончить например Python Audio Tools.

Комментариев нет:

Отправить комментарий