這裏是一個函數,它可以幫助你:
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