我試圖創建一個程序,讀取用戶給出的路徑,然後讀取該特定路徑中存在的前兩行txt文件。Python - 從txt文件讀取前兩行
問題是,我給出的這個錯誤:
「類型錯誤:強迫爲Unicode:需要字符串或緩衝區,builtin_function_or_metho d個」
我不明白爲什麼?
我試圖創建一個程序,讀取用戶給出的路徑,然後讀取該特定路徑中存在的前兩行txt文件。Python - 從txt文件讀取前兩行
問題是,我給出的這個錯誤:
「類型錯誤:強迫爲Unicode:需要字符串或緩衝區,builtin_function_or_metho d個」
我不明白爲什麼?
您似乎認爲內置的dir
意味着目錄名;不,這不對。
你應該傳遞一個目錄路徑os.chdir
而不是dir
:BTW
os.chdir('/some/directory/path')
,你不需要將整個文件讀入內存,讓您的兩條線,你可以簡單地調用next
上文件對象:
with open(file) as f:
line1, line2 = next(f), next(f)
好的,謝謝。是作爲參數發送的,它不是硬編碼的。 我在Linux上的命令行上運行python。 – LinuxN00b
作爲參數通過命令行?os.chd IR(sys.argv中[1])' –
而且,如果沒有路徑輸入,你應該打印錯誤消息後退出,否則你將得到一個IndexError的
os.chdir(sys.argv[1])
如果該文件只有一行,第二next(f)
會給StopIteration異常,這應該是逮住,或者您可以使用next(f, "")
第二線,這將默認爲空字符串,以防到達文件末尾。
編輯:我進入了錯誤的路徑。 :(
好了,所以我現在編輯的代碼和我沒有得到任何錯誤。現在的問題是,如果我有什麼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
對於初學者來說,要打印線2和3 。請給出完整的錯誤信息,包括回溯。 – timgeb
'os.chdir(dir)'你認爲'dir'代表這行嗎? – DeepSpace
似乎是'f.close',否? – itzMEonTV