Алла Тамбовцева, НИУ ВШЭ
Импортируем модуль os
(от operating system), который позволяет работать с локальными (т.е. находящимися на компьютере) файлами и папками.
import os
Для начала определим рабочую папку – папку, которая используется по умолчанию (из неё по умолчанию запускается Jupyter, в неё сохраняются файлы и прочее, именно она отображается во вкладке Home).
os.getcwd() # от get current working directory
'/Users/allat/Desktop'
На Windows в начале строки будет название диска (C:
или D:
), плюс, слэши могут быть обратными (\
или \\
). В дальнейшем при создании папки или при указании пути к папке/файлу нужно помнить, что Python распознаёт только прямые слэши /
(на Windows ещё двойные \\
, но иногда бывают сбои).
Добавим пустую папку на рабочий стол (Desktop
) и назовём её to-test
:
os.mkdir('/Users/allat/Desktop/to-test')
Совет: если работаете с такого рода операциями впервые (никогда не создавали/удаляли файлы и папки через командную строку или подобные), лучше потестить всё в специально созданной папке или работать с копиями файлов. Python не будет уточнять, действительно ли вы хотите удалить файл или заменить файл новым с таким же названием, он молча удалит его или перезапишет. Будьте бдительны!
Сделаем только что созданную папку рабочей:
os.chdir('/Users/allat/Desktop/to-test') # chdir - от change directory
Посмотрим на содержимое этой папки:
os.listdir()
[]
Пока пусто. Это ожидаемо. Исправим: создадим два txt-файла, один пустой, а другой – с двумя строками.
f1 = open('file1.txt', 'w')
f1.close()
f2 = open('file2.txt', 'w')
# вписываем строки file = f2
print("Hello", file = f2)
print("World", file = f2)
f2.close()
Проверим теперь:
os.listdir() # появились!
['file2.txt', 'file1.txt']
Функция listdir()
возвращает список файлов/папок. По умолчанию, если ничего не указано в круглых скобках,
возвращается содержимое текущей рабочей папки. Но в скобках можно указать путь к любой папке:
os.listdir('/Users/allat/Documents/github')
['py-icef', 'allatambov.github.io', 'misc', '.nbgrader.log', '.DS_Store', 'PyMasters', 'LingData', 'py-dat18', 'RprogData', 'PyDat-0919', 'py-dat19', 'CognTech', 'py-basics-19', 'r20-homeworks', 'Py-programming-3', 'PyProg-2018', 'HSE-PEP', 'pydat19-ap', 'R-programming-3', 'rprog-2019', 'PsyMS']
Вернёмся к нашей папке и сохраним её содержимое одним списком:
files = os.listdir()
files
['file2.txt', 'file1.txt']
Проверим, что содержимое файла file2.txt
изменилось. Воспользуемся методом readlines()
, который считывает строки из текстового файла:
f = open('file2.txt', 'r') # r - для чтения
f.readlines()
['Hello\n', 'World\n']
Сохраним строки в список lines
:
lines = f.readlines()
lines
[]
Список оказался пустым! Дело в том, что метод .readlines()
срабатывает один раз, когда мы его запускаем после загрузки файла через open()
. Чтобы все же сохранить строки в список, еще раз прогоним строку с open()
, в которой мы загружаем файл f
, а потом ячейку с lines
:
f = open('file2.txt', 'r')
lines = f.readlines()
lines
['Hello\n', 'World\n']
Символ для перехода на новую строку всегда будет сохраняться, его можно убрать с помощью метода .strip()
для строк, который убирает лишние пробелы в начале и в конце строки.
[line.strip() for line in lines]
['Hello', 'World']
На этом работу с модулем os
пока можно закончить.
Можно найти разные способы для загрузки файлов с данными в Python, но мы остановимся на самом простом – с помощью библиотеки pandas
. Импортируем библиотеку:
import pandas as pd
Начнем с формата CSV, который расшифровывается как comma separated values. Столбцы в таком файле по умолчанию отделяются друг от друга запятой. Например, такая таблица
small = pd.DataFrame([[0, 1, 4], [9, 5, 2]])
small.columns = ['a', 'b', 'c']
small
a | b | c | |
---|---|---|---|
0 | 0 | 1 | 4 |
1 | 9 | 5 | 2 |
сохраненная в формате CSV, будет выглядеть так:
a,b,c
0,1,4
9,5,2.
Но разделитель столбцов в таблице может быть и другим, например, точкой с запятой:
a;b;c
0;1;4
9;5;2.
В таких случаях нам потребуется дополнительно выставлять параметр sep = ";"
, чтобы Python понимал, как правильно отделять один столбец от другого.
Давайте сначала экспортируем датафрейм small
в файл с расширением .csv
и в файл с расширением .xlsx
, а потом полученные файлы загрузим в Python.
# экспортируем, теперь эти файлы лежат в рабочей папке
small.to_csv('abc.csv')
small.to_excel('abc.xlsx')
# импортируем
dat = pd.read_csv("abc.csv")
dat
Unnamed: 0 | a | b | c | |
---|---|---|---|---|
0 | 0 | 0 | 1 | 4 |
1 | 1 | 9 | 5 | 2 |
dat2 = pd.read_excel("abc.xlsx")
dat2
Unnamed: 0 | a | b | c | |
---|---|---|---|---|
0 | 0 | 0 | 1 | 4 |
1 | 1 | 9 | 5 | 2 |