Python:如何将三个文本文件合并为一个变量并分割成列表
我正在使用Python 2.5,想要创建一个叫做total的变量,并把三个文件的内容加到这个变量里。然后我想把total压缩一下,转换成十六进制格式,并把它分割成一个字符串列表,每个字符串的最大长度是4096个字符。
目前我已经有了文件的列表,我是这样把它们全部连接到total里的:
filelist = ['debug.log', 'error.log', 'reclog.log'];
total = ''
for files in filelist:
f = open(files, 'r');
total = total + f.read();
f.close();
compressedtotal = zlib.compress(total);
hextotal = compressedtotal.encode('hex');
到这里为止,我觉得我做得还不错。但是接下来我想把hextotal分割成一个叫做msglist的字符串列表。这个msglist里的每个字符串长度都不能超过4096个字符。
if len(hextotal)%4096 >0 : checker = 1;
else: checker = 0;
nmsgs = int(math.ceil(len(hextotal)/4096));
nn = str(nmsgs);
msglist = [];
for msgs in range(1,nmsgs+1):
if msgs == nmsgs and checker == 1:
msglist.append(hextotal[4096*(msgs-1):]);
else: msglist.append(hextotal[4096*(msgs-1):4096*(msgs)]);
我觉得应该有更简单的方法,因为这样做不够“python风格”,而且我对Python还很陌生。非常感谢!
4 个回答
1
你可以定义一个生成器,它会返回一些小块数据:
def chunkify(l, n):
for i in xrange(0, len(l), n):
yield l[i:i+n]
然后你可以选择遍历这些小块数据
msglist = []
for chunk in chunkify(hextotal, 4096):
msglist.append(chunk)
或者像这样创建最终的列表
msglist = list(chunkify(hextotal, 4096))
2
msglist = []
for start in range(0, len(hextotal), 4096):
msglist.append(hextotal[start:start+4096])
你可以在某个东西的末尾继续切片;系统会自动只给你到字符串的末尾为止(比如,切片 "abcd"[2:6]
会返回 cd
)。
正如CSkau提到的,这也可以用列表推导的方式来实现:
msglist = [hextotal[i:i+4096] for i in range(0, len(hextotal), 4096)]
3
我个人最喜欢的是列表推导式:
msglist = [ hextotal[i:i+4096] for i in range(0,len(hextotal),4096) ]