Python readline с пользовательским разделителем
Новичок здесь.
Я пытаюсь читать строки из файла, однако одна строка в файле .txt имеет n где-то посередине и при попытке прочитать эту строку .readline python разрезает его посередине и выводит в виде двух строк.
Когда я копирую и перевожу строку в это окно, она отображается в виде двух строк. Поэтому я загрузил файл сюда: https://ufile.io/npt3n
Также добавлен скриншот файла, как он показан в txt-файле.
- это экспортируется ли история группового чата из Whatsup..если вам интересно.
- пожалуйста, помогите мне прочитать одну строку полностью, как показано в файле txt.
.
f= open("f.txt",mode='r',encoding='utf8')
for i in range(4):
lineText=f.readline()
print(lineText)
f.close()
2 ответов:
Python 3 позволяет определить, что такое новая строка для конкретного файла. Он редко используется, потому что режим универсальных новых строк по умолчанию очень терпим:
При чтении входных данных из потока, если newline отсутствует, включается универсальный режим newlines. Строк во входных данных могут закончиться '\п', '\р', или '\р\н', и они преобразуются в '\п', прежде чем возвращается к вызывающей стороне.
Итак, здесь вы должны сделать явным, что только '\r\n' является концом строка:
f= open("f.txt",mode='r',encoding='utf8', newline='\r\n') # use enumerate to show that second line is read as a whole for i, line in enumerate(fd): print(i, line)
Вместо использования функции readline можно читать все содержимое и разбивать строки регулярным выражением:
import re with open("txt", "r") as f: content = f.read() # remove end line characters content = content.replace("\n", "") # split by lines lines = re.compile("(\[[0-9//, :\]]+)").split(content) # clean "" elements lines = [x for x in lines if x != ""] # join by pairs lines = [i + j for i, j in zip(lines[::2], lines[1::2])]Если все содержание имеет одно и то же начало [...] вы можете разделить это, а затем очистить все части, опуская элементы"". Затем вы можете соединить каждую часть с помощью функции zip (https://stackoverflow.com/a/5851033/1038301 )

Comments