我正在读入一个文本文件中的一行,使用:
file = urllib2.urlopen("http://192.168.100.17/test.txt").read().splitlines()
并在telnetlib.write命令中将其输出到16字符宽的液晶显示器。如果读取的行长于16个字符,我希望将其分成16个字符的字符串,并在一定的延迟(例如10秒)后将每个部分推出,一旦完成,代码应该移动到输入文件的下一行并继续。
我已经尝试过搜索各种解决方案和阅读itertools等,但我对Python的理解不足以让任何东西工作,除非使用一堆纠结在一起的if then else语句,这可能会让我陷入困境!
什么是我做我想做的事情的最好方法?
发布于 2013-09-18 00:14:20
一种解决方案是使用此函数:
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)
将其转换为列表(例如)。生成器比列表更有内存效率,因为它们在需要时生成元素,而不是一次生成所有元素,但是它们缺乏某些功能,如索引。
此生成器还在末尾包含任何较小的块:
>>> list(chunkstring("abcdefghijklmnopqrstuvwxyz", 5))
['abcde', 'fghij', 'klmno', 'pqrst', 'uvwxy', 'z']
示例用法:
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)
发布于 2019-01-10 04:44:18
我知道这很老套,但我想补充一下如何分解具有可变长度列的字符串:
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))
发布于 2020-10-05 02:26:39
我认为这种方式更容易阅读:
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)
https://stackoverflow.com/questions/18854620
复制相似问题