Python:如何将三个文本文件合并为一个变量并分割成列表

4 投票
4 回答
526 浏览
提问于 2025-04-16 20:17

我正在使用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) ]

撰写回答