Приклади роботи з текстовими файлами
У даній темі представлено приклади запису та читання інформації для текстових файлів.
Зміст
- 1. Читання/запис списку, що містить n цілих чисел
- 2. Читання/запис списку, що містить рядки
- 3. Читання/запис кортежу, що містить об’єкти чисел з плаваючою комою
- 4. Читання/запис кортежу що містить різнотипні об’єкти
- 5. Читання/запис словника
- 6. Читання/запис двовимірної матриці цілих чисел, представленої у вигляді списку
- 7. Читання/запис множини, що містить цілі числа
- 8. Читання/запис даних різних типів: список та кортеж
- Зв’язані теми
Пошук на інших ресурсах:
1. Читання/запис списку, що містить n цілих чисел
У прикладі демонструються настурні операції:
- створення списку з 10 випадкових чисел;
- збереження списку у текстовому файлі;
- читання з файлу у новий список для контролю.
Текст програми наступний:
# Запис/читання списку випадкових чисел # 1. Підключити модуль random import random # 2. Створити список з 10 випадкових чисел i = 0 lst = [] while i<10: number = random.randint(0, 101) # число від 0 до 100 lst = lst + [number] i = i+1 print("lst = ", lst) # 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 = ", strs) # прочитати усі слова і записати їх в список як цілі числа for s in strs: if s!='': lst2 = lst2 + [int(s)] # додати число до списку # 6.4. Вивести результат для контролю print("n = ", len(lst2)) print("lst2 = ", lst2) # 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 = ", s) # Додати рядок s в список lst2 lst2 = lst2 + [s] # 8. Вивести список lst2 для контролю print("lst2 = ", lst2) # 9. Закрити файл - необов'язково f.close()
Результат роботи програми
s = abc s = bcd s = cba s = abd lst2 = ['abc', 'bcd', 'cba', 'abd']
⇑
3. Читання/запис кортежу, що містить об’єкти чисел з плаваючою комою
Приклад демонструє запис та читання кортежу, що містить об’єкти чисел з плаваючою комою.
# Python. Робота з файлами # Запис/читання кортежу що містить об'єкти типу 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 = ", T2) # T2 = (3.8, 2.77, -11.23, 14.75) # 3.4. Закрити файл f.close()
Результат роботи програми
T2 = (3.8, 2.77, -11.23, 14.75)
Вигляд файлу myfile5.txt
3.8 2.77 -11.23 14.75
⇑
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 = ", T3) # T3 = (5, True, 'abcde fghi') # 2.4. Закрити файл f.close()
Результат виконання програми
T3 = (5, True, 'abcde fghi')
⇑
5. Читання/запис словника
Словник також можна записувати у файл. У даному прикладі записується та читається словник, що містить перелік номерів днів тижня та їх назв. Для полегшення читання даних кожен елемент словника розміщується в окремому рядку.
# Запис/читання словника у текстовий файл. # Словник містить об'єкти типу {int:str} # 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[key] = value # 3.4. Вивести словник для контролю print("D2 = ", D2) # 3.5. Закрити файл f.close()
Результат роботи програми
D2 = {1: 'Sun', 2: 'Mon', 3: 'Tue', 4: 'Wed', 5: 'Thu', 6: 'Fri', 7: 'Sat'}
Вигляд файлу myfile6.txt
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 = ", M2) # 3.5. Закрити файл f.close()
Результат роботи програми
M2 = [[2, 1, -3], [4, 8, -2], [1, 2, 3], [7, -3, 8]]
Вигляд файлу myfile8.txt
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({num}) # 3.4. Вивести множину для контролю print("M2 = ", M2) # M2 = {2, 3, -12, 38, 22} # 3.5. Закрити файл f.close()
Результат роботи програми
M2 = {2, 3, -12, 38, 22}
Вигляд файлу myfile7.txt
2 3 38 -12 22
⇑
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 = ", L2) print("T2 = ", T2)
Результат роботи програми
L2 = ['John Johnson', 'Peter Petrov', 'O Neill', 'J. Dunkan'] T2 = (2.0, 3.85, 7.77, -1.8, 5.25)
Вигляд файлу myfile9.txt
4 John Johnson Peter Petrov O Neill J. Dunkan 5 2 3.85 7.77 -1.8 5.25
⇑
Зв’язані теми
⇑