2014-04-11 32 views
0

我有一個任務,因爲要求讀取文件並顯示文件的前10行,或者如果文件長度小於10行,則顯示所有行。當我試圖在我的計算機上運行我的代碼時,它將文件註冊爲0行(不管我使用了哪個文件),並僅顯示空白行作爲輸出。我想了解我出錯的位置,這樣我就可以避免我的錯誤。任何風格或其他提示也是受歡迎的。Python代碼不讀取文件,說文件沒有行

這裏是我的代碼:

#Displays the top 10 lines in a file 

import sys 

# Make sure the input is correct, take file name 
if len(sys.argv) == 2: 
    filename = sys.argv[1] 
else: 
    print("You must start the program with 1 command line parameter.") 
    quit() 

# open file  
fle = open(filename, "r") 

#Count number of lines 
linecount = 0 
for line in fle: 
    linecount = linecount + 1 

# If the file is less than 10 lines, print the entire file 
# If the file has more than 10 lines, print only first 10. 
lines = fle.readlines() 
if linecount < 10: 
    for line in fle: 
     print(line,)   
else: 
    for i in range(10): 
     print(lines[i]) 
+0

爲什麼在'for file for file'中不打印文件?然後,當linecount大於10時,打破循環。 – Yaiyan

+0

@Yaiyan不幸的是,我們不允許使用休息時間。雖然我確實看到了這是如何工作的。 – Musicalducky

回答

2

你不需要計數線,或檢查線路上的限制,Python可以做這一切爲您服務。只要像這樣做:

with open(filename, "r") as fle: 
    lines = fle.readlines() 
    print '\n'.join(lines[:10]) 

更新:

如果你堅持要用自己的代碼,這裏是固定的版本:

#Displays the top 10 lines in a file 

import sys 

# Make sure the input is correct, take file name 
if len(sys.argv) == 2: 
    filename = sys.argv[1] 
else: 
    print("You must start the program with 1 command line parameter.") 
    quit() 

# open file  
fle = open(filename, "r") 

lines = fle.readlines() 
linecount = len(lines) 

if linecount < 10: 
    for line in lines: 
     print(line)   
else: 
    for i in range(10): 
     print(lines[i]) 
+0

謝謝!我不認爲我們的教授教給我們關於''\ n'.join(行[:10])',但這似乎對我有意義。你會碰巧知道爲什麼我的代碼沒有任何機會嗎?我知道我的情況很糟糕,但我仍然無法弄清楚它爲什麼不能正常工作...... – Musicalducky

+0

你應該用'line for line:'替換你的line'for line:',因爲你只需閱讀整個文件,您不需要再讀一遍。第二個,在'if linecount <10:' – bosnjak

+0

Mmmm之後做了_something_。現在只是告訴我最後的印刷說明中沒有足夠的線條。 @ _ @ – Musicalducky

4

難道

for line in fle: 
    linecount = linecount + 1 

從文件中讀取每一行,這樣,循環完成後,有沒有行閱讀該文件在lines = fle.readlines()

嘗試在lines = fle.readlines()之前插入一個fle.seek(0),以在重新讀取文件之前將文件「倒回」到開頭。

(參見here例如)

+0

我不太確定我在這裏明白。我嘗試在'for line in fle:'循環後面打印行數,結果爲0.在計算行數時,程序沒有選擇任何東西。在'lines = fle.readlines()'幫助我之前如何'fle.seek(0)'? @ _ @ – Musicalducky

+0

嗯。在那種情況下,其他地方一定有其他問題。錯誤的文件名或不存在的/空文件也許。但是,如果勞倫斯的解釋工作,我們不需要深入挖掘:) – JimmyB

1

我會寫的代碼,如下是簡單

with open("give_your_file_path") as file_to_read: 
    head=[file_to_read.next() for x in xrange(10)] 

然後,

print head 

你去那裏,它打印不管你需要。

希望這有助於你

+0

* pythonic解決方案;) – smassey

+0

Ooohhhh maaannn。這個看起來很漂亮,但我不認爲我們在課堂上學過這個東西。如果我開始推出漂亮的代碼,教師們會感到懷疑。但是謝謝你! – Musicalducky

+0

@Musicalducky你總是可以聲稱你已經熟練掌握了一段時間和練習,因此即興創作;)大聲笑.... – kingmakerking

0

,如果你想計算文件中的行在Unix平臺上:

import os 
def linecount_wc(filePath): 
    command = "wc -l %s" % filePath 
    return int(os.popen(command).read().split()[0])