Найти - Пользователи
Полная версия: re и finditer
Начало » Python для новичков » re и finditer
1 2
LinuxBoy
Есть файл, в нем текст. С “.*.” должен вывести весь файл, но получаю ошибку. Не пойму никак что за параметр string у finditer, в качестве string хочу использовать файл.

import string
import sys
import re

print "Content-type: text/html\n"

file = open("file.txt").readlines()
for match in re.finditer(".*.", file):
print match
UsCr
file = open("file.txt", "r").readlines()
Нужно указывать режим, в котором открываете файл.
Nik
readlines() возвращает список строк, а не строку. Используйте метод read():

>>> import re
>>> f = open("file.txt").read()
>>> f
'String1\nString2\nString3\nString4'
>>> for match in re.finditer(".+", f): print "'%s'" % match.group(0)

'String1'
'String2'
'String3'
'String4'
LinuxBoy, я не понимаю зачем вам это нужно, но не проще сделать так:

>>> for line in open("file.txt"): print "'%s'" % line.rstrip()

'String1'
'String2'
'String3'
'String4'
UsCr
Нужно указывать режим, в котором открываете файл.
Режим “r” это значение по умолчанию…
regall
LinuxBoy, вы когда считываете с помощью readlines() у вас в результате получается список строк. Если хотите весь файл в 1 строку - метод read(). В данном случае он и нужен.
UsCr, файл, при использовании метода open, если не указан режим, по умолчанию открывается для чтения, так что дело не в этом.
LinuxBoy
Спасибо! Вариант от Nik работает идельно, только вот возник еще вопросец. Как убрать символы '' из вывода в html?
Nik
print "'%s'" % line.rstrip()
заменить на
print line.rstrip()
LinuxBoy
На самом деле rstrip не при чем, просто надо не
"'%s'"
а
"%s"
LinuxBoy
Подскажите еще, мне нужно читать файл построчно, допустим 10 строк за раз снизу и в каждой строке проверять наличие определенных слов в соответствии с регексом и выводить только их. Понимаю что нужно использовать метод readline() в цикле, но что-то метод научного тыка приводит только к ошибкам…
Nik
LinuxBoy
Понимаю что нужно использовать метод readline() в цикле
Достаточно в цикле указать функцию open()… С помощью метода next() (вызываемого неявно) файл будет читаться построчно.

"""
Содержимое файла file.txt:
String1
287
String2
782
"""
import re
p = re.compile(r"^[0-9]+$")
for line in open("file.txt"):
line = line.rstrip()
if p.search(line):
print line
LinuxBoy
но что-то метод научного тыка приводит только к ошибкам…
Может просто книжку почитать или в документации порыться?
LinuxBoy
Читал, конкретных примеров нет. Туго идет.
p = re.compile(r".*sdso")
for line in reversed(open("file.txt").readline()):
line = line.rstrip()
if p.search(line):
print "%s<br>" % line
Хочу в обратном порядке, получаю:
TypeError: argument to reversed() must be a sequence\r,

Также мне интересен момент с readlines(), в качестве аргумента передаю 50, но читает все равно весь файл… Мне нужно нижних 10 строк прочитать, потому что лог растет и может быть до 100Mb…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB