Как перевести файл в строку python
Перейти к содержимому

Как перевести файл в строку python

  • автор:

Как перевести файл в строку python

Чтобы открыть текстовый файл на запись, необходимо применить режим w (перезапись), a (дозапись) или r+ / w+ (чтение и запись) . Затем для записи применяется метод write(str) , в который передается записываемая строка. Стоит отметить, что записывается именно строка, поэтому, если нужно записать числа, данные других типов, то их предварительно нужно конвертировать в строку.

Запишем некоторую информацию в файл «hello.txt»:

with open("hello.txt", "w") as file: file.write("hello world") print("Файл записан")

Если мы откроем папку, в которой находится текущий скрипт Python, то увидем там файл «hello.txt». Этот файл можно открыть в любом текстовом редакторе и при желании изменить.

Теперь дозапишем в этот файл еще одну строку:

with open("hello.txt", "a") as file: file.write("\nhello work") print("Файл изменен")

Дозапись выглядит как добавление строки к последнему символу в файле, поэтому, если необходимо сделать запись с новой строки, то можно использовать эскейп-последовательность «\n». В итоге файл hello.txt будет иметь следующее содержимое:

hello world hello work

Для записи списка строк имеется метод writelines() . В качестве параметра он принимает список строк:

lines = ["Hello Word\n", "Hello Work\n", "Hello World\n"] with open("hello2.txt", "a") as file: file.writelines(lines) print("Список строк записан в файл")

Стоит учитывать, что, если мы хотим, чтобы каждая строка из списка располагалась на отдельной строке в файле, то строка в списке должна заканчиваться на символ «\n».

Еще один способ записи в файл представляет стандартный метод print() , который применяется для вывода данных на консоль:

with open("hello.txt", "a") as myfile: print("\nhello metanit.com", file=myfile)

Для вывода данных в файл в метод print в качестве второго параметра передается название файла через параметр file. А первый параметр представляет записываемую в файл строку.

Чтение файла

Для чтения файла он открывается с режимом r (Read), и затем мы можем считать его содержимое различными методами:

  • readline() : считывает одну строку из файла
  • read() : считывает все содержимое файла в одну строку
  • readlines() : считывает все строки файла в список

Например, считаем выше записанный файл построчно:

with open("hello.txt", "r") as file: for line in file: print(line)

Несмотря на то, что мы явно не применяем метод readline() для чтения каждой строки, но в при переборе файла этот метод автоматически вызывается для получения каждой новой строки. Поэтому в цикле вручную нет смысла вызывать метод readline. Консольный вывод:

hello world hello work hello metanit.com

Однако поскольку функция print неявно добавляет к каждой строке перевод строки «\n», а строки в записанном файлетакже разделяются символом перевода строки «\n», то получается, что каждая строка оканчивается двойным «\n». и чтобы исключить излишнего переноса на другую строку в функцию print можно передать значение end=»» .

with open("hello.txt", "r") as file: for line in file: print(line, end="")

Теперь явным образом вызовем метод readline() для чтения отдельных строк:

with open("hello.txt", "r") as file: str1 = file.readline() # считываем первую строку print(str1, end="") str2 = file.readline() # считываем вторую строку print(str2)
hello world hello work

Метод readline можно использовать для построчного считывания файла в цикле while:

with open("hello.txt", "r") as file: line = file.readline() while line: print(line, end="") line = file.readline()

Если файл небольшой, то его можно разом считать с помощью метода read() :

with open("hello.txt", "r") as file: content = file.read() print(content)

И также применим метод readlines() для считывания всего файла в список строк:

with open("hello.txt", "r") as file: contents = file.readlines() str1 = contents[0] str2 = contents[1] print(str1, end="") print(str2)

При чтении файла мы можем столкнуться с тем, что его кодировка не совпадает с ASCII. В этом случае мы явным образом можем указать кодировку с помощью параметра encoding :

filename = "hello.txt" with open(filename, encoding="utf8") as file: text = file.read()

Чтение и запись

Для открытия файла сразу для чтения и записи применяются флаги:

  • r+ : если файл не найден, то генерируется исключение FileNotFoundError
  • w+ : если файл не существует, то он автоматически создается. Если файл существует, то он перезаписывается

Например, запишем и считаем из файла данные:

with open("hello.txt", "w+") as file: file.write("Hello world\nHello work\n") # сначала записываем данные file.seek(0) # перемещаемся к первому байту в файле content = file.read() # считываем данные print(content)

Перемещение по файлу

Для перемещения по файлу после его открытия применяется метод seek() . В него передается индекс байта, к которому надо переместить указатель в файле. Например, в примере выше после записи указатель в файле автоматически устанавливается на конец файла. И считывания данных идет с позиции, на которой стоит указатель. И чтобы его сдвинуть в самое начало, применяется вызов

file.seek(0)

Аналогичным образом мы можем перемещаться по файлу на нужную позицию. Например, считаем данные, начиная с 5-го символа:

with open("hello.txt", "w+") as file: file.write("Hello world\n") # сначала записываем данные file.seek(6) # перемещаемся к шестому байту в файле content = file.read() # считываем данные print(content) # world

Пример работы с файлами

Теперь напишем небольшой скрипт, в котором будет записывать введенный пользователем массив строк и считывать его обратно из файла на консоль:

# имя файла FILENAME = "messages.txt" # запись строки в файл def write(): message = input("Введите строку: ") with open(FILENAME, "a") as file: file.write(message + "\n") # чтение файла файл def read(): with open(FILENAME, "r") as file: for message in file: print(message, end="") print() # перевод строки для разделения меню и вывода while(True): selection = int(input("1.Запись в файл\t\t2.Чтение файла\t\t3.Выход\nВыберите действие: ")) match selection: case 1: write() case 2: read() case 3: break case _: print("Некорректный ввод") print("Программа завершена")

Пример работы программы:

1.Запись в файл 2.Чтение файла 3.Выход Выберите действие: 1 Введите строку: Hello World 1.Запись в файл 2.Чтение файла 3.Выход Выберите действие: 1 Введите строку: Hello METANIT.COM 1.Запись в файл 2.Чтение файла 3.Выход Выберите действие: 2 Hello World Hello METANIT.COM 1.Запись в файл 2.Чтение файла 3.Выход Выберите действие: 3 Программа завершена

Как прочитать файл построчно в Python

Существует много способов чтение из файла построчно в Python. Вы можете считать строки в список или обращаться к каждой из строк в цикле при помощи итератора или вызова функции объекта file.

В этом руководстве мы научимся считывать файл построчно, используя функции readline() , readlines() и объект файла на примерах различных программ.

Пример 1: Чтение файла построчно функцией readline()

В этом примере мы будем использовать функцию readline() для файлового объекта, получая каждую строку в цикле.

Как использовать функцию file.readline()

Следуйте пунктам приведенным ниже для того, чтобы считать файл построчно, используя функцию readline() .

  1. Открываем файл в режиме чтения. При этом возвращается дескриптор файла.
  2. Создаём бесконечный цикл while.
    1. В каждой итерации считываем строку файла при помощи readline() .
    2. Если строка не пустая, то выводим её и переходим к следующей. Вы можете проверить это, используя конструкцию if not . В противном случае файл больше не имеет строк и мы останавливаем цикл с помощью break .
     
     
    # получим объект файла file1 = open("sample.txt", "r") while True: # считываем строку line = file1.readline() # прерываем цикл, если строка пустая if not line: break # выводим строку print(line.strip()) # закрываем файл file1.close
    Привет! Добро пожаловать на PythonRu. Удачи в обучении!

    Пример 2: Чтение строк как список функцией readlines()

    Функция readlines() возвращает все строки файла в виде списка. Мы можем пройтись по списку и получить доступ к каждой строке.

    В следующей программе мы должны открыть текстовый файл и получить список всех его строк, используя функцию readlines() . После этого мы используем цикл for, чтобы обойти данный список.

     
    # получим объект файла file1 = open("sample.txt", "r") # считываем все строки lines = file1.readlines() # итерация по строкам for line in lines: print(line.strip()) # закрываем файл file1.close
    Привет! Добро пожаловать на PythonRu. Удачи в обучении!

    Пример 3: Считываем файл построчно из объекта File

    В нашем первом примере, мы считываем каждую строку файла при помощи бесконечного цикла while и функции readline() . Но Вы можете использовать цикл for для файлового объекта, чтобы в каждой итерации цикла получать строку, пока не будет достигнут конец файла.

    Ниже приводится программа, демонстрирующая применение оператора for-in, для того, чтобы перебрать строки файла.

    Для демонстрации откроем файл с помощью with open. Это применимо и к предыдущим двум примерам.

    Python: как преобразовать строки при импорте из файла?

    Формат именно такой, увеличить кол-во строчек по одному значению в каждой нельзя. Я делаю импорт из этого файла в список:

    def initPoints(): points = [] f = open('scores.txt') points = f.read().splitlines() f.close() print(points) initPoints() 
    ['0 1', '1 0'] 

    Мне же нужно, чтобы результат принял такой вид:

    ['0', '1', '1', '0'] 

    Пока не могу понять, как сделать. Помогите разобраться, пожалуйста.
    Отслеживать
    9,426 4 4 золотых знака 41 41 серебряный знак 57 57 бронзовых знаков
    задан 28 апр 2014 в 17:19
    121 2 2 серебряных знака 9 9 бронзовых знаков
    @pikey ого какой хост для картинок. Привет от латышского подполья.
    28 апр 2014 в 18:19
    Говорят, йован похитил разум биологов, юзернейм 😉
    28 апр 2014 в 18:44

    2 ответа 2

    Сортировка: Сброс на вариант по умолчанию

    points = f.read().split() 

    Отслеживать
    ответ дан 28 апр 2014 в 17:44
    171 5 5 бронзовых знаков

    Интерпретатор видит какие-то символы форматирования в начале первой строки. Вот что на выходе получается: ['п»ї0', '1', '1', '0'] Хотя в исходном scores.txt нет ничего, что намекало бы на формат. Что это может быть?

    28 апр 2014 в 18:10
    f.read().strip().split()
    28 апр 2014 в 18:17
    @pikey utf-BOM, например. Думаю, что нужно дулать codecs.open(file, 'r', 'utf-8-sig')
    28 апр 2014 в 18:18

    А если исходный файл не в utf-8? Я ведь верно понял - 'utf-8-sig' говорит интерпретатору читать файл как utf-8?

    28 апр 2014 в 18:29

    @pikey, да, но цифры, насколько понимаю, кодируются одинаково вне зависимости от кодировки. Тут проблема может быть только если питон не найдет эти первые три байта. Но если файл создается и обрабатывается исключительно программой, то там внезапностей быть не должно.

    28 апр 2014 в 18:35

    Я тут, с вашей помощью, допилил то, что нужно было допилить. В принципе, всё работает, как тебуется. Единственное, что хотелось бы прояснить для себя - как добиться того же результата, но с более компактным кодом?

    Например, вот одна функция:

    def newScores(): global result global scores result = int(input("Enter 1, if the computer won, or enter '0' otherwise: ")) if (result==1): print ("PC's won this round, total score list has been adjusted:") scores[0] = (scores[0]+1) scores[3] = (scores[3]+1) else: print ("You've won this round, total score list has been adjusted:") scores[1] = (scores[1]+1) scores[2] = (scores[2]+1) print (scores) newScores() 
    • как написать операции по изменению значений строк в списке поболеелучшей?
    def updateScores(): global scores scores = [str(x) for x in scores] print ("") # the next 2 lines is there for testing, should be removed later on print ("The 'scorelist' has been converted to strings:") print (scores) scores[0] = (scores[0]+" "+scores[1]+"\n") scores[1] = (scores[2]+" "+scores[3]) scores.remove(scores[2]) scores.remove(scores[2]) print (scores) f = open("scoretest.txt", "w+") line = f.writelines(scores) f.close() updateScores() 

    Как все эти операции со строками написать в более сжатом виде?

    Файлы. Работа с файлами.

    Python 3 логотип

    В данной статье мы рассмотрим встроенные средства python для работы с файлами: открытие / закрытие, чтение и запись.

    Итак, начнем. Прежде, чем работать с файлом, его надо открыть. С этим замечательно справится встроенная функция open:

    У функции open много параметров, они указаны в статье "Встроенные функции", нам пока важны 3 аргумента: первый, это имя файла. Путь к файлу может быть относительным или абсолютным. Второй аргумент, это режим, в котором мы будем открывать файл.
    Режим Обозначение
    'r' открытие на чтение (является значением по умолчанию).
    'w' открытие на запись, содержимое файла удаляется, если файла не существует, создается новый.
    'x' открытие на запись, если файла не существует, иначе исключение.
    'a' открытие на дозапись, информация добавляется в конец файла.
    'b' открытие в двоичном режиме.
    't' открытие в текстовом режиме (является значением по умолчанию).
    '+' открытие на чтение и запись

    Режимы могут быть объединены, то есть, к примеру, 'rb' - чтение в двоичном режиме. По умолчанию режим равен 'rt'.

    И последний аргумент, encoding, нужен только в текстовом режиме чтения файла. Этот аргумент задает кодировку.

    Чтение из файла

    Открыли мы файл, а теперь мы хотим прочитать из него информацию. Для этого есть несколько способов, но большого интереса заслуживают лишь два из них.

    Первый - метод read, читающий весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n).

    Ещё один способ сделать это - прочитать файл построчно, воспользовавшись циклом for:

    Запись в файл

    Теперь рассмотрим запись в файл. Попробуем записать в файл вот такой вот список:

    Откроем файл на запись:

     Запись в файл осуществляется с помощью метода write:
     
    

    После окончания работы с файлом его обязательно нужно закрыть с помощью метода close:

     Теперь попробуем воссоздать этот список из получившегося файла. Откроем файл на чтение (надеюсь, вы поняли, как это сделать?), и прочитаем строки.
       Мы получили тот же список, что и был. В более сложных случаях (словарях, вложенных кортежей и т. д.) алгоритм записи придумать сложнее. Но это и не нужно. В python уже давно придумали средства, такие как pickle или json, позволяющие сохранять в файле сложные структуры.

    Для вставки кода на Python в комментарий заключайте его в теги

    • Модуль csv - чтение и запись CSV файлов
    • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
    • Онлайн-обучение Python: сравнение популярных программ
    • Книги о Python
    • GUI (графический интерфейс пользователя)
    • Курсы Python
    • Модули
    • Новости мира Python
    • NumPy
    • Обработка данных
    • Основы программирования
    • Примеры программ
    • Типы данных в Python
    • Видео
    • Python для Web
    • Работа для Python-программистов
    • Сделай свой вклад в развитие сайта!
    • Самоучитель Python
    • Карта сайта
    • Отзывы на книги по Python
    • Реклама на сайте

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *