Примеры работы с текстовыми файлами
В данной теме представлены примеры записи и чтения информации для текстовых файлов.
Поиск на других ресурсах:
1. Чтение/запись списка, содержащего n целых чисел
В примере демонстрируются следующие операции:
- создание списка из 10 случайных чисел;
- сохранение списка в текстовом файле;
- чтение из файла в новый список с целью контроля.
Текст программы следующий:
# Запись/чтение списка случайных чисел # 1. Подключить модуль random import random # 2. Создать список из 10 случайных чисел i = 0 lst = [] while i# число от 0 до 100 lst = lst + [number] i = i+1 print("lst color: #ff0000;"># 3. Сохранить список в текстовом файле # 3.1. Открыть файл для записи f = open('file.txt', 'wt') # 3.2. Записать количество элементов в списке s = str(len(lst)) # Конвертировать целое число в строку f.write(s + '\n') # Записать строку # 3.3. Записать каждый элемент for i in lst: s = str(i) # конвертировать элемент списка в строку f.write(s + ' ') # записать число в строку # 4. Закрыть файл f.close() # ------------------------------------------- # 5. Чтение из файла 'file.txt' f = open('file.txt', 'r') # 6. Прочитать из файла числа и сформировать список # 6.1. Прочитать количество элементов в списке, # сначала читается строка, затем эта строка # конвертируется в целое число методом int() s = f.readline() n = int(s) # 6.2. Создать пустой список lst2 = [] # 6.3. Реализовать обход файла по строкам и считать числа. # Для чтения строк используется итератор файла. for line in f: # метод split - разбивает на слова на основании символа пробел strs = line.split(' ') # получить массив строк strs # Вывести strs с целью контроля print("strs color: #ff0000;"># прочитать все слова и записать их в список как целые числа for s in strs: if s!='': lst2 = lst2 + [int(s)] # добавить число к списку # 6.4. Вывести результат для контроля print("n color: #800080;">len(lst2)) print("lst2 color: #ff0000;"># 6.5. Закрыть файл - необязательно f.close()
Результат работы программы
lst = [48, 89, 1, 36, 68, 26, 61, 38, 1, 6] strs = ['48', '89', '1', '36', '68', '26', '61', '38', '1', '6', ''] n = 10 lst2 = [48, 89, 1, 36, 68, 26, 61, 38, 1, 6]
2. Чтение/запись списка, содержащего строки
При чтении/записи строк не нужно реализовывать дополнительные преобразования из одного типа в другой, так как данные из файла читаются в виде строк.
# Запись/чтение списка строк # 1. Заданный список строк L = [ 'abc', 'bcd', 'cba', 'abd'] # 2. Открыть файл для записи f = open('filestrs.txt', 'wt') # 3. Цикл записи строк for s in L: # записать каждую строку в отдельную строку файла f.write(s + '\n') # 4. Закрыть файл f.close() # ------------------------------------------- # 5. Чтение из файла 'filestrs.txt' f = open('filestrs.txt', 'rt') # 6. Сформировать новый список lst2 = [] # сначала пустой список # 7. Реализовать обход файла по строкам и считать числа. # Для чтения строк используется итератор файла. for s in f: # Убрать последний символ '\n' из s s = s.rstrip() # Вывести s для контроля print("s color: #ff0000;"># Добавить строку s в список lst2 lst2 = lst2 + [s] # 8. Вывести список lst2 для контроля print("lst2 color: #ff0000;"># 9. Закрыть файл - необязательно f.close()
Результат работы программы
s = abc s = bcd s = cba s = abd lst2 = ['abc', 'bcd', 'cba', 'abd']
3. Чтение/запись кортежа, содержащего объекты чисел с плавающей запятой
Пример демонстрирует запись и чтение кортежа, который содержит объекты чисел с плавающей запятой.
# Запись/чтение кортежа, содержащего объекты типа float. # 1. Исходный кортеж T1 = ( 3.8, 2.77, -11.23, 14.75) # 2. Запись кортежа в файл # 2.2. Открыть файл для записи в текстовом режиме f = open('myfile5.txt', 'wt') # 2.3. Цикл записи объектов в файл for item in T1: # 2.3.1. Конвертировать item в строку s = str(item) # 2.3.2. Записать строку + символ ' ' пробел f.write(s + ' ') # 2.4. Закрыть файл f.close() # 3. Чтение из файла, который содержит вещественные числа # и создание нового кортежа T2 f = open('myfile5.txt', 'rt') # 3.1. Создать пустой кортеж T2 T2 = () # 3.2. Чтение данных из файла и образование кортежа for lines in f: # Использовать итератор файла # 3.2.1. Разбить строку lines на подстроки strings. # Любая подстрока strings[i] - это вещественное число, # представленное в строчном формате strings = lines.split(' ') # 3.2.2. Обойти все подстроки в файле, # конвертировать и добавить их к кортежу T2 for s in strings: if s != '': # если непустая строка # Конвертировать в вещественное число num = float(s) # Добавить к кортежу T2 += (num,) # 3.3. Вывести кортеж для контроля print("T2 color: #ff0000;"># T2 = (3.8, 2.77, -11.23, 14.75) # 3.4. Закрыть файл f.close()
Результат работы программы
4. Чтение/запись кортежа содержащего разнотипные объекты
В случае, если кортеж содержит объекты разных типов при записи/чтении важно придерживаться последовательности этапов конвертирования объектов в нужный тип. Ниже приведен пример записи и чтения кортежа, который содержит объекты целого, логического и строчного типов.
# Запись/чтение кортежа, содержащего разнотипные объекты # 1. Запись кортежа в файл # 1.1. Исходный кортеж T1 = ( 5, True, "abcde fghi") # 1.2. Открыть файл для записи в текстовом режиме f = open('myfile4.txt', 'wt') # 1.3. Поэлементная запись кортежа в файл, # поскольку в кортеже есть строки, то записываем # каждый элемент в отдельную строку for item in T1: s = str(item) + '\n' # добавить символ новой строки f.write(s) # Закрыть файл f.close() # 2. Чтение кортежа f = open('myfile4.txt', 'rt') # 2.1. Создать пустой кортеж T3 = () # 2.2. Чтение данных из файла и создание кортежа # Первым читается число типа int s = f.readline() T3 = T3 + (int(s),) # конкатенация кортежей # Вторым читается логическое значение типа bool s = f.readline() T3 = T3 + (bool(s),) # Третьим читается строка типа str s = f.readline() s = s.rstrip() # убрать символ '\n' из строки T3 = T3 + (s,) # 2.3. Вывести кортеж для контроля print("T3 color: #ff0000;"># T3 = (5, True, 'abcde fghi') # 2.4. Закрыть файл f.close()
Результат выполнения программы
5. Чтение/запись словаря
Словарь также можно записывать в файл. В данном примере записывается и читается словарь, который содержит перечень номеров дней недели и их названий. Для облегчения чтения данных каждый элемент словаря размещается в отдельной строке.
# Запись/чтение словаря в текстовый файл. # Словарь содержит объекты типа # 1. Исходный словарь - перечень дней недели и их номеров D = < 1:'Sun', 2:'Mon', 3:'Tue', 4:'Wed', 5:'Thu', 6:'Fri', 7:'Sat' > # 2. Запись словаря в файл # 2.1. Открыть текстовый файл для записи f = open('myfile6.txt', 'w') # 2.2. Цикл записи элементов словаря в файл for item in D: # 2.2.1. Сформировать строку вида key:value s = str(item) # взять ключ как строку s += ':' # добавить символ ':' s += D.get(item) # добавить значение value по его ключу s += '\n' # добавить символ новой строки # 2.2.2. Записать строку в файл f.write(s) # 2.3. Закрыть файл f.close() # 3. Чтение из файла, который содержит данные словаря D # 3.1. Открыть файл для чтения f = open('myfile6.txt', 'rt') # 3.2. Создать пустой словарь D2 D2 = <> # 3.3. Чтение данных из файла и образование нового словаря for lines in f: # Использовать итератор файла # 3.3.1. Любая подстрока lines - это элемент вида key:value # представленный в строчном формате. # Разбить lines на 2 подстроки strings = lines.split(':') # 3.3.2. Получить ключ и значение key = int(strings[0]) # получить ключ value = strings[1].rstrip() # получить значение без '\n' # 3.3.3. Добавить пару key:value к словарю D2 D2Цикл по файлу питон = value # 3.4. Вывести словарь для контроля print("D2 color: #ff0000;"># 3.5. Закрыть файл f.close()
Результат работы программы
1:Sun 2:Mon 3:Tue 4:Wed 5:Thu 6:Fri 7:Sat
6. Чтение/запись двумерной матрицы целых чисел, представленной в виде списка
В примере демонстрируется запись и чтение двумерной матрицы целых чисел размерностью 3*4.
# Запись/чтение двумерной матрицы чисел # 1. Исходная матрица целых чисел размером 3*4 M = [ [ 2, 1, -3], [ 4, 8, -2], [ 1, 2, 3], [ 7, -3, 8] ] # 2. Запись матрицы в текстовый файл # 2.1. Открыть текстовый файл для записи f = open('myfile8.txt', 'w') # 2.2. Цикл записи элементов матрицы в файл # в удобном для отображения виде i = 0 while i < 4: # цикл по строкам j = 0 while j < 3: # цикл по столбцам s = str(M[i][j]) f.write(s + ' ') # между числами символ ' ' пробел j = j+1 f.write('\n') i = i + 1 # 2.3. Закрыть файл f.close() # 3. Чтение матрицы из файла # 3.1. Открыть файл для чтения f = open('myfile8.txt', 'rt') # 3.2. Создать пустой список M2 = [] # 3.3. Чтение данных из файла и образование новой матрицы i = 0 for line in f: # Использовать итератор файла # Конвертировать строку line в список строк lines = line.split(' ') # разбить строку line на подстроки lines # временный список lst = [] # обход элементов в строке for ln in lines: # забрать символ '\n' ln = ln.rstrip() if ln != '': num = int(ln) # взять отдельное число lst = lst + [num] # добавить число к списку M2 = M2 + [lst] # добавить строку к результирующей матрице # 3.4. Вывести матрицу M2 для контроля print("M2 color: #ff0000;"># 3.5. Закрыть файл f.close()
Результат работы программы
M2 = [[2, 1, -3], [4, 8, -2], [1, 2, 3], [7, -3, 8]]
7. Чтение/запись множества, которое содержит целые числа
В примере демонстрируется возможный вариант сохранения множества в текстовом файле
# Запись/чтение множества в текстовом файле. # 1. Задано множество целочисленных объектов M = < 2, 3, -12, 22, 38 ># 2. Запись множества в файл # 2.1. Открыть текстовый файл для записи f = open('myfile7.txt', 'w') # 2.2. Цикл записи элементов множества в файл for item in M: # 2.2.1. Конвертировать элемент множества в строку + '\n' s = str(item) + '\n' # 2.2.2. Записать строку в файл f.write(s) # 2.3. Закрыть файл f.close() # 3. Чтение множества из файла # 3.1. Открыть файл для чтения f = open('myfile7.txt', 'rt') # 3.2. Создать пустое множество M2 = set() # 3.3. Чтение данных из файла и образование нового множества for line in f: # Использовать итератор файла # Конвертировать строку line в целое число num = int(line) M2 = M2.union() # 3.4. Вывести множество для контроля print("M2 color: #ff0000;"># M2 = # 3.5. Закрыть файл f.close()
Результат работы программы
8. Чтение/запись данных разных типов: список и кортеж
Чтобы записать в текстовый файл данные разных базовых типов нужно последовательно записать данные одного типа, затем другого типа. При считывании таких данных нужно придерживаться такого самого порядка чтобы не нарушить полученную структуру данных.
В примере демонстрируется последовательная запись в файл списка и кортежа. При чтении придерживается такая же последовательность: сначала читается список, затем кортеж. Список включает строки. Кортеж содержит вещественные числа. Чтобы облегчить работу по распознаванию формата файла, каждый записываемый (читаемый) элемент размещается в отдельной строке файла.
Поскольку список и кортеж могут содержать разное количество элементов, то в файл записываются их размерности.
# Запись/чтение данных разных типов. # Обработка списка и кортежа. # 1. Задан некоторый список строк и кортеж чисел L = [ ‘John Johnson’ , ‘Peter Petrov’ , ‘O Neill’ , ‘J. Dunkan’ ] T = ( 2, 3.85, 7.77, -1.8, 5.25 ) # 2. Запись данных в файл: сначала записывается список, затем кортеж # 2.1. Открыть текстовый файл для записи f = open( ‘myfile9.txt’ , ‘w’ ) # 2.2. Записать количество элементов списка + ‘\n’ f.write( str ( len (L)) + ‘\n’ ) # 2.3. Цикл записи элементов списка в файл # Каждый из элементов списка размещается в новой строке. for item in L: # обход списка f.write(item + ‘\n’ ) # записать строку в файл # 2.4. После списка записывается кортеж, # каждый элемент кортежа размещается в отдельной строке. # Сначала записать количество элементов кортежа f.write( str ( len (T)) + ‘\n’ ) # обход кортежа в цикле for item in T: f.write( str (item) + ‘\n’ ) # запись каждого элемента кортежа # 2.3. Закрыть файл f.close() # 3. Чтение списка и кортежа из файла # 3.1. Открыть файл для чтения f = open( ‘myfile9.txt’ , ‘rt’ ) # 3.2. Создать результирующий пустой список # и результирующий кортеж L2 = [] T2 = () # 3.3. Чтение данных из файла и формирование списка L2 n = int (f.readline()) # прочитать количество элементов в списке i = 0 while i < n: # цикл чтения строк из файла и образования списка s = f.readline().rstrip() # прочитать строку без символа '\n' if (s != '' ): L2 += [s] i = i + 1 # 3.4. Прочитать количество элементов кортежа n = int (f.readline()) i = 0 while i < n: # цикл чтения строк и образование кортежа s = f.readline() if (s != '' ): T2 = T2 + ( float (s),) # добавить вещественное число к кортежу i = i+1 # 3.5. Закрыть файл f.close() # Вывести список и кортеж для контроля print ( "L2 color: #800080;">print ( «T2 color: #333300;»>⇑