Эй, я столкнулся с проблемой, когда моя программа перестала итерации через файл в записи 57802 по какой-то причине, я не могу понять. Я положил раздел сердцебиения, чтобы я мог видеть, на какой линии он включен, и это помогло, но теперь я застрял в том, почему он останавливается здесь. Я думал, что это проблема с памятью, но я просто запустил ее на своем компьютере с 6 ГБ памяти и все еще остановился.Почему мой код останавливается?
Есть ли лучший способ сделать что-нибудь, что я делаю ниже? Моя цель - прочитать файл (если вам нужно, чтобы я отправил его вам, я могу писать текстовый журнал 15 МБ) найти совпадение на основе выражения регулярного выражения и распечатать соответствующую строку. Еще впереди, но это насколько я получил. Я использую python 2.6
Любые идеи помогут и запрограммируют комментарии также! Я python noob и все еще участвую.
import sys, os, os.path, operator
import re, time, fileinput
infile = os.path.join("C:\\","Python26","Scripts","stdout.log")
start = time.clock()
filename = open(infile,"r")
match = re.compile(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}),\d{3} +\w+ +\[([\w.]+)\] ((\w+).?)+:\d+ - (\w+)_SEARCH:(.+)')
count = 0
heartbeat = 0
for line in filename:
heartbeat = heartbeat + 1
print heartbeat
lookup = match.search(line)
if lookup:
count = count + 1
print line
end = time.clock()
elapsed = end-start
print "Finished processing at:",elapsed,"secs. Count of records =",count,"."
filename.close()
Это строка 57802, где она не:
2010-08-06 08:15:15,390 DEBUG [ah_admin] com.thg.struts2.SecurityInterceptor.intercept:46 - Action not SecurityAware; skipping privilege check.
Это совпавшая строка:
2010-08-06 09:27:29,545 INFO [patrick.phelan] com.thg.sam.actions.marketmaterial.MarketMaterialAction.result:223 - MARKET_MATERIAL_SEARCH:{"_appInfo":{"_appId":21,"_companyDivisionId":42,"_environment":"PRODUCTION"},"_description":"symlin","_createdBy":"","_fieldType":"GEO","_geoIds":["Illinois"],"_brandIds":[2883],"_archived":"ACTIVE","_expired":"UNEXPIRED","_customized":"CUSTOMIZED","_webVisible":"VISIBLE_ONLY"}
Примеры данных только первые 5 строк:
2010-08-06 00:00:00,035 DEBUG [] com.thg.sam.jobs.PlanFormularyLoadJob.executeInternal:67 - Entered into PlanFormularyLoadJob: executeInternal
2010-08-06 00:00:00,039 DEBUG [] com.thg.ftpComponent.service.JScapeFtpService.open:153 - Opening FTP connection to sdrive/[email protected]:21
2010-08-06 00:00:00,040 DEBUG [] com.thg.sam.email.EmailUtils.sendEmail:206 - [email protected]
2010-08-06 00:00:00,045 DEBUG [] com.thg.sam.services.OrderService.getOrdersWithStatus:121 - Orders list size=13
2010-08-06 00:00:00,045 DEBUG [] com.thg.ftpComponent.service.JScapeFtpService.open:153 - Opening FTP connection to sdrive/[email protected]:21
Можете ли вы поместить код с помощью маркера кода. отступы теряются. – pyfunc
Как действительно базовая проверка здравомыслия, можете ли вы подтвердить, что у вас все еще есть проблема, если вы вставляете 'r' непосредственно перед строковой константой для регулярного выражения? то есть 're.compile (r '....') 'Это гарантирует, что все ваши обратные слэши будут видны компилятором regexp вместо того, чтобы быть съеденным парсером Python. – zwol
С одной стороны, в строке 'infile = C: \ Python \\ ...' вам не хватает одной обратной косой черты после 'C: \'. Всегда лучше использовать '/' для разделителя путей, поскольку это работает практически на всех платформах без необходимости экранирования. –