这里是一个函数,它可以帮助你:
def rows(f, columnSizes):
while True:
row = {}
for (key, size) in columnSizes:
value = f.read(size)
if len(value) < size: # EOF
return
row[key] = value
yield row
为例它如何使用:
from StringIO import StringIO
sample = StringIO("""aaabbbccc
d e f
g h i
""")
for row in rows(sample, [('first', 3),
('second', 3),
('third', 4)]):
print repr(row)
请注意,与其他答案不同,此示例是而不是行分隔(它纯粹将文件用作字节提供程序,而不是行的迭代器),因为您特别提到这些字段未分隔,我认为行可能不是;具体考虑换行符。
您可以使用'in'运算符测试一个字符串是否是另一个字符串的子字符串。例如,
>>> 'OW' in 'hello'
False
>>> 'OW' in 'helOWlo'
True
因此,在这种情况下,你可能会做
if 'OW' in row['third']:
stuff()
,但你可以明显地测试任何领域的任何价值,你认为合适。
你究竟是什么意思“上一个tw o列“?该行中的最后两个字符或最后两个空格分隔的条目? – 2010-06-10 08:02:36
您的“行”是否被换行符分开? – tzaman 2010-06-10 08:38:52
@Tim:如果第二列包含字符串'OW'...“,则OP写入”...最后两列...“,所以认为他有可能在句子内切换了含义:”最后两个字符,如果第二个字段包含字符串'OW'......考虑(重新)?读他的第2段:“列......也不是全部相同的字符数......最后一个是5”。 – 2010-06-10 09:16:41