2012-12-27 137 views
2

我只是剛開始進入Python的旅程。我想建立一個小程序來計算我在摩托車上進行氣門間隙時的墊片尺寸。我將擁有一個具有目標許可的文件,並且我將詢問用戶輸入當前的墊片尺寸和當前許可。該程序然後將吐出目標墊片尺寸。看起來很簡單,我建立了一個電子數據表,做它,但我想學習Python,這似乎是一個很簡單的項目......從txt文件中獲取數據

總之,到目前爲止,我有這樣的:

def print_target_exhaust(f): 
    print f.read() 

#current_file = open("clearances.txt") 
print print_target_exhaust(open("clearances.txt")) 

現在,我已經讀取了整個文件,但是我怎樣才能讓它獲得值,例如,第4行。我在函數中嘗試了print f.readline(4),但似乎只是吐出了第一個四個字符...我做錯了什麼?

我是全新的,請容易對我! -d

+0

嘗試'f.readlines()[3]'。 –

+0

相關錯誤在這裏:http://stackoverflow.com/questions/13988421/reading-document-lines-to-the-user-python/13988466#13988466 –

回答

4

要閱讀所有行:

lines = f.readlines() 

然後,打印線4:

print lines[4] 

注意的是Python開始指數爲0,這樣實際上是第五個行文件。

+0

嘿,我會嘗試。大概只是採取該行的價值,而不是ptint它,我會做一些像'value = lines [4]'? 它是否必須是方括號? – Demonic

+0

+1。但是由於'readlines'在3.3中被棄用,所以值得學習「現代」版本'list(f)'而不是'f.readlines()'。但是,這確實需要更多的基礎知識...... – abarnert

+0

正確,是的,你需要方括號。請注意,從'readline'(或'readlines')返回的行將包含換行符,因此您可能需要使用'value = lines [4] .strip()'。 – bogatron

-1

效率不高,但它應該告訴你它是如何工作的。基本上它會在它讀取的每一行上保持一個運行計數器。如果該行是'4',那麼它將打印出來。

## Open the file with read only permit 
f = open("clearances.txt", "r") 
counter = 0 
## Read the first line 
line = f.readline() 

## If the file is not empty keep reading line one at a time 
## till the file is empty 
while line: 
    counter = counter + 1 
    if counter == 4 
     print line 
    line = f.readline() 
f.close() 
+1

在Python中,幾乎沒有使用手動計數器的好理由。使用內建[枚舉](http://docs.python.org/2/library/functions.html#enumerate)函數。 – kojiro

+0

哦,男人,櫃檯是我知道如何使用的少數事情之一! – Demonic

+0

我也是,我是一個固件人,所以Python不完全是我的「東西」,但我認爲它可能對某人有用。 –

3
with open('myfile') as myfile: # Use a with statement so you don't have to remember to close the file 
    for line_number, data in enumerate(myfile): # Use enumerate to get line numbers starting with 0 
     if line_number == 3: 
      print(data) 
      break # stop looping when you've found the line you want 

的更多信息:

+0

這是一個很好的解決方案,因爲它不會(嘗試)先將所有行加載到內存中。 – poke

+0

@poke:當然,除非他想看第4行,然後是第176行,然後是第1行,然後是第73行... – abarnert

+0

@abarnert是的,對於這個問題沒有好的解決方案,所以我猜這不是這是一個很好的解決方案。 – kojiro