- Python. Текстовые файлы. Примеры обработки (модификации) текстовых файлов в соответствии с условием
- Текстовые файлы. Примеры решения задач на модификацию текстовых файлов
- Связанные темы
- Конец файла Python
- Используйте file.read() , чтобы найти конец файла в Python
- Используйте метод readline() с циклом while для поиска конца файла в Python
- Использование оператора Walrus для поиска конца файла в Python
- Сопутствующая статья — Python File
Python. Текстовые файлы. Примеры обработки (модификации) текстовых файлов в соответствии с условием
Текстовые файлы. Примеры решения задач на модификацию текстовых файлов
В данной теме приведены примеры решения задач, которые могут возникнуть при обработке текстовых файлов. Предложенный в данной теме подход оперирования данными в файлах может быть использован для решения широкого круга родственных задач.
Поиск на других ресурсах:
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 ilen(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 pos2exit() # 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 ilen(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 ilen(L): k = i # поиск наименьшего элемента x = L[i] j=i+1 while jlen(L): if L[j] # Поменять местами наименьший элемент из 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()
Связанные темы
Конец файла Python
- Используйте file.read() , чтобы найти конец файла в Python
- Используйте метод readline() с циклом while для поиска конца файла в Python
- Использование оператора Walrus для поиска конца файла в Python
EOF означает End Of File . Это момент в программе, когда пользователь больше не может читать данные. Это означает, что программа читает весь файл до конца. Кроме того, при достижении EOF или конца файла в качестве вывода возвращаются пустые строки. Итак, пользователю необходимо знать, находится ли файл в его EOF.
В этом руководстве представлены различные способы узнать, находится ли файл в его EOF в Python.
Используйте file.read() , чтобы найти конец файла в Python
Метод file.read() — это встроенная функция Python, используемая для чтения содержимого данного файла. Если метод file.read() возвращает пустую строку в качестве вывода, это означает, что файл достиг своего EOF.
with open("randomfile.txt", "r") as f: while True: file_eof = file_open.read() if file_eof == '': print('End Of File') break
Обратите внимание, что когда мы вызываем функцию open() для открытия файла при запуске программы, мы используем «r» как режим только для чтения файла. Наконец, мы используем условный оператор if , чтобы проверить, что возвращаемый результат — это пустая строка.
Используйте метод readline() с циклом while для поиска конца файла в Python
Метод file.readline() — еще одна встроенная функция Python для чтения одной полной строки текстового файла.
Цикл while в Python — это цикл, который повторяет данное условие в блоке кода до тех пор, пока данное условие не станет истинным. Этот цикл используется, когда количество итераций заранее не известно.
Использование цикла while с методом readline() помогает многократно читать строки в данном текстовом файле.
file_path = 'randomfile.txt' file_text = open(file_path, "r") a = True while a: file_line = file_text.readline() if not file_line: print("End Of File") a = False file_text.close()
Цикл while прекратит итерацию, когда в текстовом файле не останется текста для чтения методом readline() .
Использование оператора Walrus для поиска конца файла в Python
Оператор Walrus — новый оператор в Python 3.8. Обозначается := . Этот оператор по сути является оператором присваивания, который используется для присвоения значений True и их немедленной печати.
file = open("randomfile.txt", "r") while (f := file.read()): process(f) file.close()
Здесь значения True — это символы, которые функция read() будет читать из текстового файла. Это означает, что оператор моржа прекратит печать после завершения файла.
Lakshay Kapoor is a final year B.Tech Computer Science student at Amity University Noida. He is familiar with programming languages and their real-world applications (Python/R/C++). Deeply interested in the area of Data Sciences and Machine Learning.