Форум сайта python.su
Есть файл, в нем текст. С “.*.” должен вывести весь файл, но получаю ошибку. Не пойму никак что за параметр 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
Офлайн
file = open("file.txt", "r").readlines()
Офлайн
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'
>>> for line in open("file.txt"): print "'%s'" % line.rstrip()
'String1'
'String2'
'String3'
'String4'
UsCrРежим “r” это значение по умолчанию…
Нужно указывать режим, в котором открываете файл.
Офлайн
LinuxBoy, вы когда считываете с помощью readlines() у вас в результате получается список строк. Если хотите весь файл в 1 строку - метод read(). В данном случае он и нужен.
UsCr, файл, при использовании метода open, если не указан режим, по умолчанию открывается для чтения, так что дело не в этом.
Офлайн
Спасибо! Вариант от Nik работает идельно, только вот возник еще вопросец. Как убрать символы '' из вывода в html?
Офлайн
print "'%s'" % line.rstrip()
print line.rstrip()
Офлайн
На самом деле rstrip не при чем, просто надо не
"'%s'"
"%s"
Офлайн
Подскажите еще, мне нужно читать файл построчно, допустим 10 строк за раз снизу и в каждой строке проверять наличие определенных слов в соответствии с регексом и выводить только их. Понимаю что нужно использовать метод readline() в цикле, но что-то метод научного тыка приводит только к ошибкам…
Офлайн
LinuxBoyДостаточно в цикле указать функцию open()… С помощью метода next() (вызываемого неявно) файл будет читаться построчно.
Понимаю что нужно использовать метод readline() в цикле
"""
Содержимое файла 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Может просто книжку почитать или в документации порыться?
но что-то метод научного тыка приводит только к ошибкам…
Офлайн
Читал, конкретных примеров нет. Туго идет.
p = re.compile(r".*sdso")
for line in reversed(open("file.txt").readline()):
line = line.rstrip()
if p.search(line):
print "%s<br>" % line
Офлайн