繁体   English   中英

Python:如何将三个文本文件添加到一个变量中,然后将其拆分为一个列表

[英]Python: How to add three text files into one variable and then split it into a list

我正在使用Python 2.5并尝试创建一个名为total的变量并向其中添加三个文件。 然后我压缩总数并将其转换为十六进制并将其拆分为最大长度为4096个字符的字符串列表。

目前我有一个文件列表,我以这种方式将它连接到总数

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)]);

我应该有一个更简单的方法,因为这不是“pythonic”,对于python来说我是一个新手。 非常感谢

我个人最喜欢的是列表理解:

msglist = [ hextotal[i:i+4096] for i in range(0,len(hextotal),4096) ]
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)]

您可以定义一个返回块的生成器:

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))

一些想法:

  • 在终点行结束时不需要分号
  • 无需构建生成器或计算向上舍入的块数
  • 避免使用+ =来构建长字符串

相反,让切片和列表推导为您完成工作:

filelist = ['debug.log', 'error.log', 'reclog.log'];
total = [open(filename, 'r').read() for filename in filelist]
compressedtotal = zlib.compress(''.join(total))
hextotal = compressedtotal.encode('hex')
msglist = [hextotal[i:i+4096] for i in range(0, len(hextotal), 4096)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM