python:如果超出特定文件大小,则将文件输出到另一个文本文件
问题内容:
我在ubuntu中将scapy与python一起使用。我想问问是否有人知道如何编写示例:
假设我有两个正在运行脚本的文本文件,然后我要检查文件是否超过了示例500bytes,如果存在,它将存储文件中的任何内容并创建一个新的文本文件进行写入。(output1.txt,output2.txt等。)
如果有任何专长会有所帮助,将不胜感激。谢谢
我的代码的一部分是:
file = open("output.txt","w")
def example(p):
if p.haslayer(Dot11Beacon):
if p.addr2 not in uniqueAP:
file.writelines(p.addr2 + "\n")
因此,当脚本在终端中运行时,它将把它写入名为output.txt的文件中,但是我想改进该脚本以检查文本文件的文件大小,如果超过该大小,它将停止在当前文件中写入并创建一个例如,新的output2.txt并继续。
问题答案:
一个简单的示例,如果您不想使用RotatingFileHandler。
您应该os.stat('filename').st_size
用来检查文件大小。
import os
import sys
class RotatingFile(object):
def __init__(self, directory='', filename='foo', max_files=sys.maxint,
max_file_size=50000):
self.ii = 1
self.directory, self.filename = directory, filename
self.max_file_size, self.max_files = max_file_size, max_files
self.finished, self.fh = False, None
self.open()
def rotate(self):
"""Rotate the file, if necessary"""
if (os.stat(self.filename_template).st_size>self.max_file_size):
self.close()
self.ii += 1
if (self.ii<=self.max_files):
self.open()
else:
self.close()
self.finished = True
def open(self):
self.fh = open(self.filename_template, 'w')
def write(self, text=""):
self.fh.write(text)
self.fh.flush()
self.rotate()
def close(self):
self.fh.close()
@property
def filename_template(self):
return self.directory + self.filename + "_%0.2d" % self.ii
if __name__=='__main__':
myfile = RotatingFile(max_files=9)
while not myfile.finished:
myfile.write('this is a test')
运行完之后…
[mpenning@Bucksnort ~]$ ls -la | grep foo_
-rw-r--r-- 1 mpenning mpenning 50008 Jun 5 06:51 foo_01
-rw-r--r-- 1 mpenning mpenning 50008 Jun 5 06:51 foo_02
-rw-r--r-- 1 mpenning mpenning 50008 Jun 5 06:51 foo_03
-rw-r--r-- 1 mpenning mpenning 50008 Jun 5 06:51 foo_04
-rw-r--r-- 1 mpenning mpenning 50008 Jun 5 06:51 foo_05
-rw-r--r-- 1 mpenning mpenning 50008 Jun 5 06:51 foo_06
-rw-r--r-- 1 mpenning mpenning 50008 Jun 5 06:51 foo_07
-rw-r--r-- 1 mpenning mpenning 50008 Jun 5 06:51 foo_08
-rw-r--r-- 1 mpenning mpenning 50008 Jun 5 06:51 foo_09
[mpenning@Bucksnort ~]$