首先,我想说如果这是您的第二天编程,那么您已经通过使用with
语句和列表推导有了一个良好的开端!
正如其他人已经指出的那样,由于您正在[]
对包含str
ing 的变量使用索引,因此它将 视为str
一个数组,因此您可以在指定的索引处获取字符。
我想我会指出几件事:
1)你不需要f.readline()
用来迭代文件,因为文件对象f
是一个可迭代的对象(它__iter__
定义了你可以检查的方法getattr(f, '__iter__')
。所以你可以这样做:
with open('accounts.txt') as f:
for l in f:
try:
(username, password) = l.strip().split(':')
print username
print password
except ValueError:
# ignore ValueError when encountering line that can't be
# split (such as blank lines).
pass
2)你还提到你“很好奇是否有办法只打印文件的第一行?或者在那种情况下选择第二行,第三行等等?”
包中的islice(iterable[, start], stop[, step])
函数itertools
非常适合,例如,仅获取第 2 行和第 3 行(记住索引从 0 开始!!!):
from itertools import islice
start = 1; stop = 3
with open('accounts.txt') as f:
for l in islice(f, start, stop):
try:
(username, password) = l.strip().split(':')
print username
print password
except ValueError:
# ignore ValueError when encountering line that can't be
# split (such as blank lines).
pass
或者每隔一行:
from itertools import islice
start = 0; stop = None; step = 2
with open('accounts.txt') as f:
for l in islice(f, start, stop, step):
try:
(username, password) = l.strip().split(':')
print username
print password
except ValueError:
# ignore ValueError when encountering line that can't be
# split (such as blank lines).
pass
花时间学习itertools(及其食谱!!!);它将简化您的代码。