文件未读取到结尾

你好, 我正在尝试编写一个简单的日志解析程序. 我注意到了 没有将我的日志文件读取到最后. 我的日志约为200,000行,但在第26,428行停止. 我 检查了该行,没有任何特殊字符. 这是我正在使用的文件读取代码段: sysfile = open(sysfilename,'r') LineCount = 0 对于Sysfile中的行: LineCount += 1 打印str(linecount) +" - " +线 我也将同样的代码位插入了一个测试脚本中,它能够 毫无问题地解析整个日志. 非常古怪. 这是我从Perl到Python的第一次尝试,因此我感谢任何帮助. 提前致谢. - andrew

# 回答1

andydedeydedeyde********@gmail.com写道: 向我们展示更多您的周围代码,因此我们有机会弄清楚 找出为什么此工作代码停止. 此代码没有错, 问题在其他地方. 建议: LineCount = 0 对于Sysfile中的行: LineCount += 1 打印str(linecount) +" - " +线 可以写: 对于LineCount,以枚举(sysfile)中的行: 打印"%i - %s"%(linecount,line) -larry
# 回答2

anthydedebydeyde*******@gmail.com写道: 您在Windows吗? 以防万一,将" RB"作为打开模式. 问候, - - .. Facundo .. 博客:http://www.taniquetil.com.ar/plog/ pyar:http://www.python.org/ar/
# 回答3

4月25日,下午3:03,Facundo Batista
# 回答4

4月25日,下午2:51,拉里·贝茨 向我们展示更多您的周围代码,因此我们有机会弄清楚 找出为什么此工作代码停止. 此代码没有错, 问题在其他地方. 建议: LineCount = 0 对于Sysfile中的行: LineCount += 1 打印str(linecount) +" - " +线 可以写: 对于LineCount,以枚举(sysfile)中的行: 打印"%i - %s"%(linecount,line) - 拉里 嗨,拉里, 我已经附上了整个脚本. 再次感谢你的帮助. - 安德鲁 导入Getopt,Sys,RE,OS def main(): 尝试:#获取处理的选项 o,a = getopt.getopt(sys.argv [1:],'a:d:hl') 除了getopt.getopterror: #打印帮助信息和退出: 用法() sys.exit(2) opts = {} 对于k,v in o:#parse参数 哈希 opts [k] = v #make确保所有所需的选项都包含在内 如果opts.has_key(' - h'):#return帮助 - H 用法() sys.exit(0) 如果opts.has_key(' - l'): pathName = opts [' - l'] 如果不是(opts.has_key(' - a')): 用法() sys.exit() 别的: 地址= opts [' - a'] 如果不是(opts.has_key(' - d')): 用法() sys.exit() 如果没有 pathName = os.path.abspath(os.path.dirname(sys.argv [0])) #获取文件名并打开文件 sysfilename = os.path.absp ath(pathname) +" \ sys" + opts [ - d"] + ".文本" #logfilename = opts [ - l""] +" \ log" + opts [ - d"] +" .txt" spamfilename = os.path.abspath(pathName) +" \ spam" + opts [ - d"] + ".日志" 打印"加载文件:\ n" + sysfilename +" \ n" + spamfilename + " \ n" 尝试:#open日志文件 sysfile = open(sysfilename,'rb') #logFile = open(logfileName,'r') spamfile = open(spamfilename,'rb') 除了: 打印"无法打开读取文件",sys.exc_info()[0] sys.exit() toaddr = {}#这将把消息保存到地址 fraddr = {}#这将从地址保存消息 numfound = 0#用于测试 NOTFOUND = 0#用于测试 LineCount = 0#用于测试 #阅读文件并获取与搜索的消息ID 地址 对于Sysfile中的行: LineCount += 1#用于测试 #打印str(linecount) +" - " +行 daregex = re.compile(地址) 如果daregex.search(line):#found地址在行 - 继续 加工 #re.search(地址,行):#if行有地址 打印行 +" \ n"#用于测试 numfound += 1#用于测试 如果re.search('来自:',line)的邮件:#add it(消息id)to 如果需要的话 MID = GetMid(线) 如果fraddr.has_key(中): 休息 别的: fraddr [mid] ="" #print"来自:" + mid +" \ n" elif re.search('rcpt to:',line):#add it(消息id)到 如果需要的话列表 MID = GetMid(线) 如果toaddr.has_key(中): 休息 别的: toaddr [mid] ="" 别的: NOTFOUND += 1#用于测试 #重新处理的关闭和重新打开文件(可能有一个 更好的方法) sysfile.close sysfile = open(sysfilename,'r') 对于sysfile中的行:#获取所有带有消息ID的消息 被发现 MID = GetMid(线) 如果fraddr.has_key(中): fraddr [mid]+=线 #打印行 +" \ n" elif toaddr.has_key(中): toaddr [mid]+=线 sysfile.close 对于Spamfile中的行:#从垃圾邮件文件中获取类似的消息 MID = GetMid(线) 如果fraddr.has_key(中): fraddr [mid]+ ='垃圾邮件>>>'+线 elif toaddr.has_key(中): toaddr [mid]+ ='垃圾邮件>>>'+线 Spamfile.Close #开放输出文件 fname = pathName +" \\" +地址 +" .txt" fout = open(fname,'w') #输出和格式 对于fraddr.keys()中的键: fout.write(" <<<<<<<<<来自"+ address+"消息ID"+键 +" ------------- \ n") fout.write(fraddr [key]+" \ n") 对于toaddr.keys()中的键: fout.write(" >>>>>> to"+ address+"消息ID"+键 +" ------------- \ n") fout.write(toaddr [key]+" \ n") 打印" ---------------------完成处理 ----------------------------" 打印"找到:" + str(numfound)#test 打印"不匹配:" + str(未发现)#test 打印"线条:" + str(linecount)#test fout.close def getmid(daline):##从消息中提取消息ID p = re.compile(" \(.*?\)") PID = P.Search(Daline) 如果pid: id = pid.group() id = id.lstrip('\(') id = id.rstrip('\)') #print ID 返回ID 别的: 返回 DEF USAGE():#提供用法反馈 打印 """ 句法: - 一个电子邮件帐户查找 -L日志文件的位置(可选) -D日期,以文件日期格式(####) """ 如果__name__ ==" __ -main __":#致电邮件循环 main()()
# 回答5

anthydedebydeyde*******@gmail.com写道: 安德鲁,提示: 如果你 附加整个脚本,您得到的是很多人 远离线程. 例如我. 我不会读100行 代码查看问题在哪里,然后尝试解决. 处理此问题的最佳方法,并有效地从 社区,开始修剪您的代码. 因此,您将这20行带走, 问题仍然存在. 你切断了15个,问题 坚持. 工作十分钟后,您将获得15行代码,但仍显示 你的问题. 您将其发送给社区,当然您会得到更多 帮助. 作为该过程的绝妙副作用,通常您实际上 *找到 * 自己的问题,总是更好,:) 问候, - - .. Facundo .. 博客:http://www.taniquetil.com.ar/plog/ pyar:http://www.python.org/ar/
# 回答6

在<11 **********************@c18g2000prb.googlegroups .com>, Andrew.Jefferies写道: [] 我已经附上了整个脚本. 再次感谢你的帮助. 循环主体中有``break''陈述! 你真的想 在那些地方离开循环? 我至少见过两次``somefile.close'' 引用``close()`方法了,但没有 *调用 *. 括号是 Python中的"呼叫操作员",它们不是可选的! 再见, marc'blackjack'rintsch
# 回答7

4月26日,上午9:48,Facundo Batista
# 回答8

" RB",请

标签: python

添加新评论