Форум сайта python.su
-do
Привет. Вот рабочий вариант вашего примера. У меня openSUSE 10.3 и некоторые буквы русск. алфавита - р, т, ф -
крякозябрят. Буду разбираться. А в латинской транскрипции все работает. Не судите строго, это моя первая
программка по регуляркам: :)
#!/usr/bin/python
# coding: koi8-r
import re
patt_data=r"..-..-....."
patt_time=r"..:..."
patt_1=r"1\)[A-z]+," # дпя русской - ur"1\)[А-я]+,"
patt_9=r"9\)[A-z]+,"
patt_1_8=r"[1-8]\)"
patt_10=r"10\)[A-z]+ [A-z]+ [A-z]+,"
patt_11=r"11\)[A-z]+,"
patt_12=r"12\)[0-9].[0-9],"
file1=open("file_in","r+")
file2=open("file_out","w+")
while 1:
string1=file1.readline()
if not string1:
break
else:
string2=file1.readline()
sub_data=re.findall(patt_data,string1)[0] # data+time
sub_time=re.findall(patt_time,string2)[0]
substr=sub_data+sub_time
string_result= re.sub(patt_data, substr, string1)
sub_1=re.findall(patt_1,string1)[0] # 1) + 9)
sub_9=re.findall(patt_9,string2)[0]
substr=sub_1[2:]+sub_9[2:]
string_result= re.sub(patt_1, substr, string_result)
string_result=re.sub(patt_1_8, "" ,string_result) # удаление 2)...8)
sub_10=re.findall(patt_10,string2)[0] # + 10)...+12)
sub_11=re.findall(patt_11,string2)[0]
sub_12=re.findall(patt_12,string2)[0]
string_result += sub_10[3:]+sub_11[3:]+sub_12[3:]
string_result=string_result.replace("\n","") # удаление \n
string_result=string_result.replace("\\n","")
string_result += "\\n"+"\n" # добавление \n
print string_result
file2.write(string_result)
file1.close()
file2.close()
01-09-2008,1)Sidorov,2)14.05.1996,3)user@host.com,4)120.60,5)net,6)Ushakova,7)26,8)15,\n
15:20,9)Ivan,10)dopolnitelnaia text inform,11)ocenka,12)7.8,\n
01-09-2008,1)Kuznecova,2)27.02.1996,3)user2@host.com,4)115.10,5)net,6)Voroshilova,7)4,8)102,\n
15:40,9)Maria,10)dopolnitelnaia text inform,11)ocenka,12)8.1,\
01-09-2008,15:20,Sidorov,Ivan,14.05.1996,user@host.com,120.60,net,Ushakova,26,15,dopolnitelnaia text inform,ocenka,7.8,\n
01-09-2008,15:40,Kuznecova,Maria,27.02.1996,user2@host.com,115.10,net,Voroshilova,4,102,dopolnitelnaia text inform,ocenka,8.1,\n
Офлайн
gmorgunov
… Даже слов нет :)))) … это ИДЕАЛЬНО (в моем понимании, на данный момент знания Python :) ) то, что изначально витало в голове как итоговый результат — СПАСИ тебя БОг! :) — легко читаемый код, с возможностью изменения параметров запросов …
По поводу работы с кириллическим текстом все работает! Прогнал через Komodo — “эталонный” вариант приведенный в первом посте — результат вышел с первого раза.
Проблема возникла сразу если отступить от исходного шаблона добавив к примеру пустую строку в начале текста или любую не пустую строку не удовлетворяющую шаблонному результату:
Traceback (most recent call last):
File "C:\regex.py", line 25, in <module>
sub_data=re.findall(patt_data,string1)[0] # data+time
IndexError: list index out of range
Офлайн
немного оффтопа :) по поводу литературы на компьютерную тематику (затронутую в первом посте) …
есть хороший китайский ресурс в котором собраны линки на книги с разных мест в сети:
ebookee.com.cn — ресурс хоть и китайский :) но книги годные для прочтения, для умеющих использовать английский язык :)
еще удобен dbeBooks
к модераторам: :)
На форуме запрещается:
-использовать нецензурные выражения в заголовке и теле послания;
-прибегать к сознательному обману и оскорбительным высказываниям в адрес собеседника;
-размещать любого вида рекламу, не запрашиваемую участниками форума;
-обсуждать темы, которые были удалены командой сайта.
-затрагивать так или иначе исторические или политические темы.
-обсуждать или выкладывать кряки ПО
Офлайн
-do
Очень рад, что помогло. И вам приятно, и мне полезно. :)
По себе знаю, самый лучший совет - это рабочий код ( пусть и корявый)
Много времени потратил, пока дошло, что у вас Windows( я делал кипи-паст, отсюда и крякозябры , и \n ).
Хорошая книжка по регуляркам - Perl Ларри Уолла. Без нее - ни фига бы не понял (Россум, Сузи).
За китайские ресурсы спасибо, обязательно посмотрю.
С уважением gmorgunov
Офлайн
в ходе тестирования нашел «багу» :))) несколько дат были в односимвольном формате для чисел дня …
и еще:
sub_1=re.findall(patt_1,string1) # 1) + 9)
полчаса не мог понять, что ему не нравится (Komodo) :))) … пока не пробежал текстовый файл и не нашел … ДВОЙНУЮ фамилию :)))) … типа «Петров-Водкин» … :)))
поправил регулярки и всё заработало! … удобно, черт побери :))), но другие варианты, здесь озвученные, буду «копать» в силу врожденного любопытства и тяги к познанию то же … возможно родится еще более любопытный симбиоз с более широкими возможностями …
… еще раз спасибо всем :)
Офлайн
igor.kaistСовсем недавно, в небольшом проекте, нужно было как-то хранить данные пользователей. Сначала тоже думал использовать подобие csv, но после того, как пару раз пришлось немного модифицировать структуры данных, то понял, что такой подход неправильный.
я эту базу данных люблю.. Легкая, удобная и не требует установки.
igor.kaistПоэтому я заюзал ее + alchemy :)
Толи дело sqlite3.. Кроссплатформенна, имеет бинды практически ко всем языкам программирования, а в случае с питоном, вообще идет в комплекте..
Офлайн