2017-05-04 205 views
-1

我試圖創建一個程序,讀取用戶給出的路徑,然後讀取該特定路徑中存在的前兩行txt文件。Python - 從txt文件讀取前兩行

問題是,我給出的這個錯誤:

「類型錯誤:強迫爲Unicode:需要字符串或緩衝區,builtin_function_or_metho d個」

我不明白爲什麼?

​​
+0

對於初學者來說,要打印線2和3 。請給出完整的錯誤信息,包括回溯。 – timgeb

+0

'os.chdir(dir)'你認爲'dir'代表這行嗎? – DeepSpace

+0

似乎是'f.close',否? – itzMEonTV

回答

1

您似乎認爲內置的dir意味着目錄名;不,這不對。

你應該傳遞一個目錄路徑os.chdir而不是dir:BTW

os.chdir('/some/directory/path') 

,你不需要將整個文件讀入內存,讓您的兩條線,你可以簡單地調用next上文件對象:

with open(file) as f: 
    line1, line2 = next(f), next(f) 
+0

好的,謝謝。是作爲參數發送的,它不是硬編碼的。 我在Linux上的命令行上運行python。 – LinuxN00b

+0

作爲參數通過命令行?os.chd IR(sys.argv中[1])' –

0

而且,如果沒有路徑輸入,你應該打印錯誤消息後退出,否則你將得到一個IndexError的

os.chdir(sys.argv[1]) 

如果該文件只有一行,第二next(f)會給StopIteration異常,這應該是逮住,或者您可以使用next(f, "")第二線,這將默認爲空字符串,以防到達文件末尾。

0

編輯:我進入了錯誤的路徑。 :(

好了,所以我現在編輯的代碼和我沒有得到任何錯誤。現在的問題是,如果我有什麼python readfiles.py /home/運行情況?

#!/usr/bin/python 

import glob, os 
import sys 

#Check to see that path was privided 
if len(sys.argv) < 2: 
    print "Please provide a path" 
    sys.exit() 

#Find files in path given 

os.chdir(sys.argv[1]) 

#Chose the ones with txt extension 

for file in glob.glob("*.txt"): 
    try: 

#Read and output first two lines of txt file 
     with open(file) as f: 
     line1, line2 = next(f), next(f, "") 
     print line1 + " " + line2 

    #Catch exception errors 
except IOError: 
     print "Failed to read " + file