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. Чтение/запись кортежа, содержащего объекты чисел с плавающей запятой

Пример демонстрирует запись и чтение кортежа, который содержит объекты чисел с плавающей запятой.

# Запись/чтение кортежа, содержащего объекты типа 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

 


Связанные темы