Стандартные потоки ввода и вывода
Чтобы считать одно число из стандартного потока ввода, можно использовать, например, следующий код: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()
Запись в текстовые файлы
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)
Комментариев нет:
Отправить комментарий