python读取更新中的文件夹/文件

最近做的项目需要读取更新中的.log file.

也就是说,.log file在不断增加内容,同时放置.log file的文件夹也在不断增加.log file的数量,当一个.log file内存满了之后,就会产生一个新的.log file.

所以我要做的两件事就是:1. 如何读取更新中的文件;2. 如何读取更新中的文件夹

1. 读取更新中的文件

加了一个start_point

它会记录上一次读取的位置,在下一次读取的时候就从上一次读取的位置开始读取。

fo = open("C:\WinUSR" + "\\" + f_name, "rb")
start_point = 0  #设置初始指针为0
fo.seek(start_point, 1)
for line in fo.readlines():
    line = str(line.decode('ISO-8859-1'))
    if fnmatch.fnmatch(line.lower(), "*error:*"):
        if fnmatch.fnmatch(line.lower(), "*secondary error 59*") or fnmatch.fnmatch(line.lower(), "*secondary error 450*"):
            try:
                errname = line[line.index(" ", line.index("TID-")) + 1:].strip()
                errtime =datetime.strptime(datetime.fromtimestamp(os.path.getmtime("C:\WinUSR" + "\\" + f_name)).strftime("%d-%b-%Y") + " " + line[:8], "%d-%b-%Y %H:%M:%S")

            except:
                continue
start_point = fo.tell() #记录当前读取的位置
fo.close()

2. 读取更新中的文件夹

python没有现成的功能可以实现,我采用的方法是当读取完一个.log file之后把读取完的这个file移动到另一个backup文件夹,然后重新扫描要读取的文件夹。

    if os.path.exists("C:\WinUSR"):
        os.chdir("C:\WinUSR")
        while os.listdir("C:\WinUSR"): #由for循环改成了while循环,判断文件夹是否为空
            files = sorted(filter(os.path.isfile, os.listdir(".")), key=os.path.getmtime, reverse=True)
            for f_name in files:
                if fnmatch.fnmatch(f_name.lower(), "*.log"):
                    fo = open("C:\WinUSR" + "\\" + f_name, "rb")
                    start_point = 0
                    fo.seek(start_point, 1)
                    abort_time = datetime(1900, 1, 1)
                    errtime = datetime(1900, 1, 1)
                    errname = "No Errors"
                    for line in fo.readlines():
                        line = str(line.decode('ISO-8859-1'))
                        if fnmatch.fnmatch(line.lower(), "*error:*"):
                            if fnmatch.fnmatch(line.lower(), "*secondary error 59*") or fnmatch.fnmatch(line.lower(), "*secondary error 450*"):
                                try:
                                    errname = line[line.index(" ", line.index("TID-")) + 1:].strip()
                                    errtime = datetime.strptime(
                                        datetime.fromtimestamp(os.path.getmtime("C:\WinUSR" + "\\" + f_name)).strftime(
                                            "%d-%b-%Y") + " " + line[:8], "%d-%b-%Y %H:%M:%S")
                                    GUI()
                                except:
                                    continue
                    start_point = fo.tell()
                    fo.close()
                    shutil.move("C:\WinUSR" + "\\" + f_name, "C:\wintrace_backup") #移动已经读取的文件到新的位置
    return

这个方法需要建立新的文件夹保存已经读取的文件,不是很理想的方法。接下来会探索其他的方法,如果小伙伴有其他的方法欢迎和我分享谢谢!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值