首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将字符串拆分为固定长度的块并在Python中使用它们的最佳方法是什么?

将字符串拆分为固定长度的块并在Python中使用它们的最佳方法是什么?
EN

Stack Overflow用户
提问于 2013-09-18 00:04:26
回答 3查看 62.3K关注 0票数 38

我正在读入一个文本文件中的一行,使用:

代码语言:javascript
复制
   file = urllib2.urlopen("http://192.168.100.17/test.txt").read().splitlines()

并在telnetlib.write命令中将其输出到16字符宽的液晶显示器。如果读取的行长于16个字符,我希望将其分成16个字符的字符串,并在一定的延迟(例如10秒)后将每个部分推出,一旦完成,代码应该移动到输入文件的下一行并继续。

我已经尝试过搜索各种解决方案和阅读itertools等,但我对Python的理解不足以让任何东西工作,除非使用一堆纠结在一起的if then else语句,这可能会让我陷入困境!

什么是我做我想做的事情的最好方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-18 00:14:20

一种解决方案是使用此函数:

代码语言:javascript
复制
def chunkstring(string, length):
    return (string[0+i:length+i] for i in range(0, len(string), length))

此函数使用生成器理解返回生成器。生成器返回切分的字符串,从0+组块长度的倍数到组块长度的倍数+组块长度的倍数。

您可以像列表、元组或string - for i in chunkstring(s,n):一样遍历生成器,或者使用list(generator)将其转换为列表(例如)。生成器比列表更有内存效率,因为它们在需要时生成元素,而不是一次生成所有元素,但是它们缺乏某些功能,如索引。

此生成器还在末尾包含任何较小的块:

代码语言:javascript
复制
>>> list(chunkstring("abcdefghijklmnopqrstuvwxyz", 5))
['abcde', 'fghij', 'klmno', 'pqrst', 'uvwxy', 'z']

示例用法:

代码语言:javascript
复制
text = """This is the first line.
           This is the second line.
           The line below is true.
           The line above is false.
           A short line.
           A very very very very very very very very very long line.
           A self-referential line.
           The last line.
        """

lines = (i.strip() for i in text.splitlines())

for line in lines:
    for chunk in chunkstring(line, 16):
        print(chunk)
票数 70
EN

Stack Overflow用户

发布于 2019-01-10 04:44:18

我知道这很老套,但我想补充一下如何分解具有可变长度列的字符串:

代码语言:javascript
复制
def chunkstring(string, lengths):
    return (string[pos:pos+length].strip()
            for idx,length in enumerate(lengths)
            for pos in [sum(map(int, lengths[:idx]))])

column_lengths = [10,19,13,11,7,7,15]
fields = list(chunkstring(line, column_lengths))
票数 3
EN

Stack Overflow用户

发布于 2020-10-05 02:26:39

我认为这种方式更容易阅读:

代码语言:javascript
复制
string = "when an unknown printer took a galley of type and scrambled it to make a type specimen book."
length = 20
list_of_strings = []
for i in range(0, len(string), length):
    list_of_strings.append(string[i:length+i])
print(list_of_strings)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18854620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档