我正在使用以下内容从文本文件中读取一行:
file = urllib2.urlopen("http://192.168.100.17/test.txt").read().splitlines()
并使用telnetlib.write命令将其输出到16个字符的LCD显示屏。如果读取的行长于16个字符,我想将其分解为16个字符长的字符串,并在一定的延迟(例如10秒)后将每个部分推出,一旦完成,代码应移至下一行输入文件,然后继续。
我曾尝试搜索各种解决方案并阅读itertools等。但是,我对Python的理解不足以使所有事情变得复杂,而如果使用if then else可能会引起混乱的混乱状态,那是一种非常漫长的方式把我绑在一起!
对我来说,做我想做的最好的方法是什么?
一种解决方案是使用此功能:
def chunkstring(string, length): return (string[0+i:length+i] for i in range(0, len(string), length))
此函数使用生成器理解来返回生成器。生成器返回从0 +块的长度的倍数到块的长度+块的长度的倍数切片的字符串。
您可以像列表,元组或字符串-那样遍历生成器for i in chunkstring(s,n): ,或使用将其转换为列表(例如)list(generator)。生成器比列表更有效地使用内存,因为生成器可以按需生成元素,而不是一次生成所有元素,但是它们缺少某些功能,例如索引。
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)