Как убрать n python при чтении из файла
Перейти к содержимому

Как убрать n python при чтении из файла

  • автор:

Как удалить \n\r из документа?

5f2a8d2bd78bb018513515.png

С помощью Python закидываю данные в текстовый документ, предварительно отформатировав его.
Получается такой текст:

5f2a8dd253e74572815879.png

Хочу убрать \n\r оставив просто \n, заменяю таким образом, в Notepad++ все работает норм:

Но когда пытаюсь исправить текст в Python до записи в документ, ничего не происходит. Пробовал таких два варианта:

articleContent = articleContent.replace('\n\r', '\n') #или это articleContent = articleContent.replace('\n\r', '')

5f2a90af56f5b661924640.png

P.S. Может быть это как-то связано с самим Notepad? Т.к. при копирование этих строк в другое место, он делает некоторые изменения:

  • Вопрос задан более трёх лет назад
  • 819 просмотров

Как убрать n 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: удалить переносы строк и лишние пробелы из строки?

Всем привет. Подскажите плз, как решить задачу с минимальным изобретанием велосипедов. Нужно очистить строку от символов переноса (заменить на пробелы) и убрать лишние пробелы и пустые строки.

Сейчас это делается вот так:

‘ ‘.join(filter(None, map(unicode.strip, input_string.splitlines())))

Может есть более стандартный способ?

Попытки привлечь либу textwrap приводят только к раздутию кода… Может, я не умею ее готовить?

  • Вопрос задан более трёх лет назад
  • 96098 просмотров

Комментировать
Решения вопроса 1

Регуляркой:
import re
mystr = » balabla\n zzz »
re.sub(«^\s+|\n|\r|\s+$», », mystr)

В этом примере удаляем пробелы в начале и конце строки и символы переноса строки. Отредактируйте под свои нужды.

Ответ написан более трёх лет назад
Нравится 9 3 комментария
Fak3 @Fak3 Автор вопроса
Спасибо за наводку!
Задача решается так:
re.sub(«\s*\n\s*», ‘ ‘, s.strip())
re.sub(«\s+», » «, s)

все норм, только вот так:
import re
mystr = » balabla\n zzz »
mystr = re.sub(«^\s+|\n|\r|\s+$», », mystr)
PS Спасибо за способ, помогло

Ответы на вопрос 4

' '.join(s.split())

не подойдёт?
Ответ написан более трёх лет назад
Нравится 5 1 комментарий

Правда при этом не только переносы и пробелы будут обработаны, но вообще все пробельные символы (табы например). Но в обычных юзкейсах это именно то что нужно.

php программист
Регулярка \s+ отличный способ =)
Ответ написан более трёх лет назад
Нравится 1 3 комментария
Fak3 @Fak3 Автор вопроса
Что-то мне фантазии не хватает, как это регуляркой решить. Поподробней можно?
Рустам Сафин @snegovikufa

Подозреваю через re.match (вроде?) создаешь список кандидатов на замену, а затем применяешь your_string.replace(what_from, what_to)

Fak3 @Fak3 Автор вопроса
А как регуляркой найти список кандидатов на замену?

__author__ = 'dikkini@gmail.com' from itertools import groupby def lines_filter(iterable): """ input: any iterable output: generator or list """ wait_chr = False is_begin = True #======================================================================================================== # You can delete "groupby" and the result will not change, but will increase the length of the input list. #======================================================================================================== for item, i in groupby(iterable): if item: is_begin = False if wait_chr: wait_chr = False yield '' yield item elif not is_begin and not wait_chr: wait_chr = True if __name__ == '__main__': list1 =['','','','i','hgf', '','','','9876','','','7','','9','','',''] # Input list print [i for i in lines_filter(list1)] # Output to the list 

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
string.rstrip()
или
string = string.replace(«\n»,»»)
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +1 ещё

Как логически редиректнуть страницу после проверки капчи?

  • 1 подписчик
  • 28 минут назад
  • 15 просмотров

Убрать символы новой строки при чтении

Author24 — интернет-сервис помощи студентам

Как убрать символ новой строки (\n) при чтении строк из файла pascal>
Здравствуйте, дорогие программисты! Помогите сделать программу, которая будет считывать текст из.

Убрать смещение в формуле при добавлении новой строки
Всем доброго времени! У меня на сайте настроен экспорт заявок клиентов напрямую в гугл таблицу.

Лишние символы новой строки при выводе из файла
Здравствуйте! При выводе из файла печатаются лишние символы новой строки. Подскажите, пожалуйста.

Убрать сдвоенные символы строки при помощи процедуры
Убрать сдвоенные символы строки при помощи процедуры

Регистрация: 21.07.2018
Сообщений: 59

mytext.replace("\\r\\n", "")

, если перенос строки и возврат каретки или

mytext.replace("\\n", "")

Регистрация: 16.01.2017
Сообщений: 32
куда я могу вставить данный код что бы не выбивало ошибку.
Помогите пожалуйста
Регистрация: 21.07.2018
Сообщений: 59

1 2 3 4 5 6 7 8 9
from pybitcointools import * with open('1.txt') as textfile: for line in textfile: priv = sha256(line.replace("\\r\\n", "")) pub = privtopub(priv) addr = pubtoaddr(pub) print priv print addr

Регистрация: 16.01.2017
Сообщений: 32

File «3.py», line 4
for line in textfile:
^
IndentationError: expected an indented block

попробовал как в старом скрипте заработало ( но опять же видимо что то не так) вычисляет так же с ошибкой

1 2 3 4 5 6 7 8 9 10
from pybitcointools import * with open('1.txt') as textfile: for line in textfile: priv = sha256(line.replace("\\r\\n", "")) pub = privtopub(priv) addr = pubtoaddr(pub) print priv print addr

Регистрация: 21.07.2018
Сообщений: 59

Лучший ответ

Сообщение было отмечено stalker0007 как решение

Решение

Слегка ошибся, попробуйте это :

priv = sha256(line.replace("\r", "").replace("\n",""))

Регистрация: 16.01.2017
Сообщений: 32

Спасибо большое мужик! Дай Бог тебе крепкого здоровья

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Необходимо убрать из строки все qqq, zzz, убрать символы, которые не соответствую ASCII символам с 33 по 126.
Добрый день. Помогите кто-нибудь со строкой разобраться, я понимаю, что это плохо не уметь.

Символы при чтении txt файла
Приветствую! Столкнулся с такой проблемой, если создаешь txt через консольное приложение и потом.

Символы при чтении txt файла
Приветствую! Столкнулся с такой проблемой, если создаешь txt через консольное приложение и потом.

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

Лишние символы при чтении файла
При чтении текстового файла в конце появляются лишние символы. Можно ли этого избежать? Чтение.

Или воспользуйтесь поиском по форуму:

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

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