Python. Приклади роботи з текстовими файлами




Приклади роботи з текстовими файлами

У даній темі представлено приклади запису та читання інформації для текстових файлів.


Зміст


Пошук на інших ресурсах:

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

 


Зв’язані теми