首先,我想說如果這是您的第二天編程,那麼您已經開始使用with
聲明和list comprehensions了!
正如其他人已經指出的那樣,因爲你正在使用[]
索引與包含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)你還提到你是「好奇,如果有隻打印文件的第一行的方式或者在這種情況下,第二次? ,第三,等等?「
從itertools
包中的islice(iterable[, start], stop[, step])
功能的偉大工程,例如,得到的只是第二& 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(及其recipes !!!);它會簡化你的代碼。
嘿,謝謝你。我剛剛回答了與你的答案類似的Johnsyweb。 :)很好奇,如果有一種方法只打印文件的第一行?或者在這種情況下,選擇第二,第三等?再次感謝! – Shtoops 2012-01-31 02:47:33
這完全是我需要的,它完美的工作!非常感謝你,夥計。我無法表達你的幫助和Johnsyweb的幫助。 :) – Shtoops 2012-01-31 02:56:09
@Shtoops:歡迎來到StackOverflow! 「非常感謝你,男人」最好表達爲[「通過點擊答案左側的複選框大綱」](http://stackoverflow.com/faq#howtoask)。 – Johnsyweb 2012-01-31 03:04:32