Python3 5.Работа с файлами,Split(),Цикл for,Список списков

21.09.2016
39
56
#1
1.Работа с файлами

Что бы открыть файл в питоне есть функция open() , которая принимает 2 аргумента , имя файла записанное в виде строки и режим в котором будем работать с файлом :
"r" = режим чтения (значение по умолчанию)
"w" = режим записи(содержимое удаляется) если файла не существует создает новый
"x" = открытие на запись, если файла не существует иначе исключение
"a" = режим дозаписи , изменения сохраняются в конце файла
"b" = чтение в двоичном коде
"t" = текстовый режим (значение по умолчанию)
"+" = запись и чтение
Возможно комбинирование режимов ("rb") чтение в двоичном коде
Python:
>>> open("sample.txt", "r") # файл находится в папке с питоном
>>> open("C:\py\sample.txt", "r") # указывается путь к файлу
При выполнении данного примера интерпретатор выведет информацию о файле:
Python:
<_io.TextIOWrapper name='sample.txt' mode='r' encoding='cp1251'>
# Имя файла , режим работы с ним и кодировка
Функция open() возвращает объект файла , возможно назначить объект переменной что бы обратиться к нему позже
Переменная не будет содержать информацию которая находится в файле , а позволяет использовать методы для чтения и изменения содержимого
Python:
>>> file = open(sample.txt", "r")
Для считывания содержимого файла используется метод read(), метод возвращает строковое представление содержимого файла , которое возможно присвоить переменной
Метод вызывается с помощью (.)
Python:
>>> file = open("sample.txt", "r")
>>> f = file.read()
Теперь можно использовать функцию print() для вывода значения присвоенного переменной f
Python:
>>> file = open("sample.txt", "r")
>>> f = file.read()
>>> print(f)
one,two,three,four,five
2.Split()

Что бы преобразовать строковый объект в список используется метод split() с аргументом разделителя, если вы имеете строку\файл с большим кол-вом (допустим имен написанных через пробел или запятую) использовать метод split() быстрее чем метод append() для создания списка
Берем данные из прошлого примера (one,two,three,four,five) содержимое файла sample.txt
Python:
>>> file = open("sample.txt", "r")
>>> f = file.read()
>>> list = f.split(",")
# содержимое файла которое было считано методом read()
# разделяем методом split() c запятой в виде разделителя (,)
>>> print(list)
['one', 'two', 'three', 'four', 'five']
Теперь возможно обращение по индексу ,длинна , срез списка , добавление и удаление элементов
Python:
>>> list[0]
'one'
Python:
>>> len(list)
5
Python:
>>> list[0:3]
# напоминалка вывод с 0 по 2  элементов , (3) считается исключением
['one', 'two', 'three']
Python:
>>> list.remove("one")
>>> print(list)
['two', 'three', 'four', 'five']
3.Цикл for

Предположим что работаете вы в бухгалтерии , и вот уже пришло время начислять рабочим зарплату , но ваш файл с фамилиями и кол-вом денег которые нужно начислить людям благодаря стараниям некоторой олдскульной бухгалтерши был пофачен и теперь состоит из кучи белеберды:) все фамилии написаны в ряд с пробелом по примеру (vasya:9000 masha:3700) и так далее.

И теперь что бы разобраться в нем нужно либо переписывать его вручную или же воспользоваться циклом for для удобного вывода
Python:
>>> f = open("zarplata.txt", "r")
# открываем файл функцией open() с режимом чтения
>>> g = f.read()
# содержимое файла считывается методом read() и присваивается переменной g
>>> zp_list = g.split(" ")
# значение переменной g делится  методом split() с разделителем (" ")
# и присваивается переменной zp_list
>>> print(zp_list) # смотрим получившийся список
['vasya:9000', 'fedya:9000', 'masha:8200', 'petya:7700', 'sasha:5950', 'inna:4700']
>>> for name in zp_list: # в конце основного блока цикла всегда ставится двоеточие ":"
>>>     print(name) # вложенный блок
# как работает цикл for читайте чуть ниже
vasya:9000
fedya:9000
masha:8200
petya:7700
sasha:5950
inna:4700
Как работает цикл for :

Переменная итератора name является временной переменной которая доступна только в цикле for
Переменной name присваивается индекс [0] в списке zp_list и выводит текущее значение переменной name функцией print()
Переменной name присваивается индекс [1] в списке zp_list и выводит текущее значение переменной name функцией print()
И так далее до последнего элемента списка, как только элементы в списке заканчиваются , цикл for перестает работать

4.Список списков

Это список в котором каждый элемент является списком(сам не верю что написал эту тавтологию, бред какой то)используя цикл for для разделения элементов списка методом split() и добавления в конечный список методом append()
Python:
>>> zp_list = ['vasya:9000', 'fedya:9000', 'masha:8200', 'petya:7700', 'sasha:5950', 'inna:4700']
# список элементов
>>> fin_list = [] # пустой список
>>> for name in zp_list:
>>>    sp_list  = name.split(",")
# деление списка , разделителем (",")
>>>    fin_list.append(sp_list) # добавление элементов методом append() в конечный список
>>> print(fin_list) # функция за пределами цикла для вывода конечного результата
[['vasya:9000'], ['fedya:9000'], ['masha:8200'], ['petya:7700'], ['sasha:5950'], ['inna:4700']]
Как работает цикл for в данном примере:

Временная переменная name принимает индекс [0] из списка zp_list , деление переменной name методом split() с разделителем (",") , присвоение полученного значения переменной sp_list .
Добавление в конечный список fin_list методом append() переменной sp_list.
И так далее до последнего элемента , после завершения цикла for
функция print() находится за пределами цикла и выводит конечный список fin_list
 
Последнее редактирование:
R

rrrFer

#2
Имя переменной не хорошее. Не понятно это 1 или l или I.Внешний вид вообще от редактора зависит. В редакторе кода на форуме больше похоже на заглавную i, а в форматированном коде на форуме - на единицу.
Это плохо и в реальном проекте (потому что ужасно), и в уроках (и читать тяжело и пример для начинающих программистов не хороший).

В остальном урок нормальный. Жду новых.
 
21.09.2016
39
56
#3
Имя переменной не хорошее. Не понятно это 1 или l или I.Внешний вид вообще от редактора зависит. В редакторе кода на форуме больше похоже на заглавную i, а в форматированном коде на форуме - на единицу.
Это плохо и в реальном проекте (потому что ужасно), и в уроках (и читать тяжело и пример для начинающих программистов не хороший).

В остальном урок нормальный. Жду новых.
переделаем) спасибо за совет
 
Последнее редактирование: