Текстовые файлы. Примеры решения задач на модификацию текстовых файлов
В данной теме приведены примеры решения задач, которые могут возникнуть при обработке текстовых файлов. Предложенный в данной теме подход оперирования данными в файлах может быть использован для решения широкого круга родственных задач.
Содержание
- 1. Как определить, что данные в текстовом файле закончились?
- 2. Как прочитать строки из текстового файла, если их количество неизвестно? Способы определения количества строк в файле
- 3. Замена строки в текстовом файле. Пример
- 4. Удаление строки из файла по ее индексу. Пример
- 5. Вставка строки в указанную позицию файла. Пример
- 6. Обмен местами двух строк в файле. Пример
- 7. Реверсирование строк файла (перестановка строк файла в обратном порядке). Пример
- 8. Сортировка строк файла. Метод сортировки выбором. Пример
- 9. Объединение двух файлов. Пример
- Связанные темы
Поиск на других ресурсах:
1. Как определить, что данные в текстовом файле закончились?
В языке Python для чтения строки используется метод readline(). Если этот метод возвращает пустую строку », то это есть признаком конца файла.
Пример.
# Вычислить количество строк в файле # 1. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 2. Цикл чтения строк файла count = 0 # количество строк в файле s = f.readline() while s != '': # цикл чтения строк до пустой строки s = f.readline() count = count+1 print('count = ', count) # вывести результат # 3. Закрыть файл f.close()
⇑
2. Как прочитать строки из текстового файла, если их количество неизвестно? Способы определения количества строк в файле
Для чтения всех строк файла можно выделить два основных способа:
- прочитать строки файла методом readlines(). Результатом будет список. Затем с помощью метода len() определить количество строк;
- реализовать цикл чтения строк методом readline() до тех пор, пока не будет пустая строка. Метод readline() возвращает пустую строку в случае, когда достигнут конец файла.
Пример. В примере приводятся 3 способа определения количества строк в файле.
# Определение количества строк в файле # Способ 1. Метод readline(). # 1.1. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 1.2. Цикл чтения строк файла count = 0 # количество строк в файле s = f.readline() while s != '': # цикл чтения строк до пустой строки s = f.readline() count = count+1 print('count = ', count) # вывести результат # 1.3. Закрыть файл f.close() # ---------------------------------- # Способ 2. Метод readlines() # 2.1. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 2.2. Прочитать строки файла в список L L = f.readlines() # 2.3. Количество элементов списка == количество строк в файле count = len(L) print('count = ', count) # 2.4. Закрыть файл f.close() # ------------------------------------- # Способ 3. Использование итератора файла # 3.1. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 3.2. Использовать файловый итератор count = 0 for line in f: count = count+1 # 3.3. Вывести результат print('count = ', count) # 3.4. Закрыть файл f.close()
⇑
3. Замена строки в текстовом файле. Пример
Чтобы заменить строку в текстовом файле нужно выполнить следующие действия:
- считать файл в список;
- изменить строку в списке;
- записать список в файл.
# Замена строки в текстовом файле # 1. Исходная строка s = "Hello world!" # 2. Указанная позиция (нумеруеться с 0) pos = 3 # 3. Открыть файл для чтения f = open('TextFile1.txt', 'r') # 4. Считать все строки из файла в список L L = f.readlines() # 5. Заменить строку в списке в позиции pos if (pos >= 0) and (pos < len(L)): # в последней строке '\n' не добавлять if (pos==len(L)-1): L[pos] = s else: L[pos] = s + '\n' # 6. Закрыть файл f.close() # ------------------------------------ # Записать измененный список в файл # 7. Открыть файл для записи f = open('TextFile1.txt', 'w') # 8. Записать список for line in L: f.write(line) # 9. Закрыть файл f.close()
⇑
4. Удаление строки из файла по ее индексу. Пример
По примеру п. 3 выполняется удаление строки по ее индексу.
# Удаление строки из файла по индексу # 1. Ввести позицию удаления (нумеруется с 0) pos = int(input('pos = ')) # 2. Открыть файл для чтения f = open('TextFile1.txt', 'r') # 3. Считать все строки из файла в список L L = f.readlines() # 4. Удалить строку из списка # Проверка, корректна ли позиция pos if (pos >= 0) and (pos < len(L)): i = pos while i<len(L)-1: L[i] = L[i+1] i = i+1 L = L[:-1] # убрать последний элемент в списке # 5. Закрыть файл f.close() # ------------------------------------ # Записать измененный список в файл # 6. Открыть файл для записи f = open('TextFile1.txt', 'w') # 7. Записать список for line in L: f.write(line) # 8. Закрыть файл f.close()
⇑
5. Вставка строки в указанную позицию файла. Пример
В данном примере осуществляется вставка строки в указанную позицию файла. Если указать позицию, которая размещена за последней строкой файла, то осуществляется дописывание строки в конец файла.
# Вставка строки в заданную позицию файла # 1. Ввести строку s = str(input('s = ')) # 2. Ввести позицию вставки (нумеруется с 0). # Если позиция равна количеству строк в файле, # то происходит дописывание строки в конец файла. pos = int(input('pos = ')) # 3. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 4. Считать все строки из файла в список L L = f.readlines() # 5. Проверка, корректно ли значение pos if (pos<0) or (pos>len(L)): f.close() exit() # 6. Проверка, есть ли pos строкой, которая # следует за последней строкой if pos==len(L): # нужно добавить строку в конец списка L L[len(L)-1] += '\n' L2 = L + [s] # добавить в конец списка L строку s else: # Создать новый список L2, который будет содержать # список L с новой строкой s, вставленной в позиции pos. L2 = [] # Скопировать элементы из L в L2 до позиции вставки L2 = L2 + L[:pos] # использовать срез (!!!) # В список L2 вставить элемент s + новая строка L2 = L2 + [s + '\n'] # Скопировать из L в L2 элементы, которые лежат после pos L2 = L2 + L[pos:] # опять использовать срез # 7. Закрыть файл f.close() # ------------------------------------ # Записать новосозданный список L2 в файл # 8. Открыть файл для записи f = open('TextFile1.txt', 'w') # 9. Записать список L2 for line in L2: f.write(line) # 10. Закрыть файл f.close()
⇑
6. Обмен местами двух строк в файле. Пример
При чтении списка из файла, последняя строка списка может быть с символом ‘\n’ в конце или без него. Эту особенность нужно учитывать в программе.
# Обмен местам двух строк в файле # 1. Ввести позицию строки 1 (нумеруется с 0) pos1 = int(input('pos1 = ')) # 2. Ввести позицию строки 2 (нумеруется с 0), pos2>pos1 pos2 = int(input('pos2 = ')) # 3. Проверка условия: pos2>pos1 if pos2<=pos1: exit() # 4. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 5. Считать все строки из файла в список L L = f.readlines() # 6. Корректировка последней строки - добавить '\n', если нужно s = L[len(L)-1] # взять последнюю строку length = len(s) # взять длину последней строки f_nl = True # флажок, указывающий, был ли символ '\n' в конце файла if (length>0)and((s[length-1] != '\n')): L[len(L)-1] += '\n' # добавить в последнюю строку '\n' f_nl = False # 7. Закрыть файл f.close() # 8. Проверка, корректно ли заданы позиции pos1 та pos2 if (pos1<0)or(pos1>=len(L))or(pos2<0)or(pos2>=len(L)): exit() # 9. Обмен строк местами s = L[pos1] L[pos1] = L[pos2] L[pos2] = s # ------------------------------------ # Записать новосозданный список L в файл # 10. Открыть файл для записи f = open('TextFile1.txt', 'w') # 11. Если в конце файла не было '\n' if f_nl == False: # то убрать из последней строки '\n' L[len(L)-1] = L[len(L)-1][:-1] # 12. Цикл записи каждой строки списка в файл for item in L: f.write(item) # 13. Закрыть файл f.close()
⇑
7. Реверсирование строк файла (перестановка строк файла в обратном порядке). Пример
# Перестановка строк файла в обратном порядке # 1. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 2. Считать все строки из файла в список L L = f.readlines() # 3. Корректировка последней строки - добавить '\n', если нужно s = L[len(L)-1] # взять последнюю строку length = len(s) # взять длину последней строки f_nl = True # флажок, указывающий, был ли символ '\n' в конце файла if (length>0)and((s[length-1] != '\n')): L[len(L)-1] += '\n' # добавить в последнюю строку '\n' f_nl = False # 4. Закрыть файл f.close() # 5. Создать новый список L2 - реверсный к списку L L2=[] i=0 while i<len(L): s = L[len(L)-i-1] # взять строку с конца списка L L2 = L2 + [s] i = i+1 # 6. Если в конце файла не было '\n' if f_nl == False: # то убрать из последней строки '\n' L2[len(L)-1] = L2[len(L)-1][:-1] # ------------------------------------ # Записать новосозданный список L2 в файл # 7. Открыть файл для записи f = open('TextFile1.txt', 'w') # 8. Цикл записи каждой строки списка в файл for item in L2: f.write(item) # 9. Закрыть файл f.close()
⇑
8. Сортировка строк файла. Метод сортировки выбором. Пример
Приводится пример сортировки строк файла. Используется метод сортировки выбором.
# Сортировка строк файла. Метод сортировки выбором # 1. Открыть текстовый файл для чтения f = open('TextFile1.txt', 'r') # 2. Считать все строки из файла в список L L = f.readlines() # 3. Корректировка последней строки - добавить '\n', если нужно s = L[len(L)-1] # взять последнюю строку length = len(s) # взять длину последней строки f_nl = True # флажок, указывающий, был ли символ '\n' в конце файла if (length>0)and((s[length-1] != '\n')): L[len(L)-1] += '\n' # добавить в последнюю строку '\n' f_nl = False # 4. Закрыть файл f.close() # 5. Сортировка выбором списка L i=0 while i<len(L): k = i # поиск наименьшего элемента x = L[i] j=i+1 while j<len(L): if L[j]<x: k = j x = L[j] j=j+1 # Поменять местами наименьший элемент из L[i] L[k] = L[i] L[i] = x i=i+1 # 6. Учесть, был ли в конце символ '\n' if f_nl == False: # то убрать из последней строки '\n' L[len(L)-1] = L[len(L)-1][:-1] # ------------------------------------ # Записать новосозданный список L в файл # 7. Открыть файл для записи f = open('TextFile1.txt', 'w') # 8. Цикл записи каждой строки списка в файл for item in L: f.write(item) # 9. Закрыть файл f.close()
⇑
9. Объединение двух файлов. Пример
# ----------------------- # Объединение файлов myfile1.bin+myfile2.bin => myfile3.bin # 1. Открыть файлы для чтения f1 = open('myfile1.bin', 'rb') f2 = open('myfile2.bin', 'rb') # 2. Считать файлы в списки L1, L2 L1 = f1.readlines() L2 = f2.readlines() # 3. Объединить списки L3 = L1 + L2 # 4. Закрыть файлы myfile1.bin, myfile2.bin f1.close() f2.close() # 5. Открыть файл myfile3.bin для записи f3 = open('myfile3.bin', 'wb') # 6. Записать строки в файл f3.writelines(L3) # 7. Закрыть результирующий файл f3.close()
⇑
Связанные темы
- Файлы. Общие понятия. Открытие/закрытие файла. Функции open(), close()
- Примеры работы с текстовыми файлами
- Примеры работы с бинарными файлами
- Модуль struct. Работа с бинарными файлами. Примеры сохранения/чтения упакованных двоичных данных
- Модуль pickle. Сериализация объектов. Примеры использования для записи/чтения информации из бинарных файлов
⇑