2017-05-04 14 views
-1

ユーザーが指定したパスを読み取り、その特定のパスに存在するtxtファイルの最初の2行を読み込むプログラムを作成しようとしています。Python - txtファイルから最初の2行を読み取る

私はなぜ理解していない "TypeError例外:::Unicodeに強制変換が必要文字列またはバッファは、見つかっdをbuiltin_function_or_metho"

問題は、私はこのエラーを与えてるということでしょうか?

​​
+0

を、あなたは2行目を印刷し、3されていることです – timgeb

+0

'os.chdir(dir)'この行に 'dir'が何を表していると思いますか? – DeepSpace

+0

は' f.close'と思われます、いいえ? – itzMEonTV

答えて

1

組み込みのdirはディレクトリ名を意味すると誤っているようです。いいえ、ちがいます。

あなたはos.chdirなくdirにディレクトリパスを渡しする必要があります。

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

ところで、あなたは2つの行を取得するためにファイル全体をメモリに読み込む必要はありません、あなたは、単に上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)はどちらかcatchedれるべき呼び出すとStopIteration例外を与える、またはあなたが、これは場合には、空の文字列がデフォルトになります、二行目のためnext(f, "")を使用することができますファイルの終わりに達しました。

0

EDIT:間違ったパスに入りました。 :(

[OK]を、ので、私は今、コードを編集していると私はエラーを取得していない。問題は、今私はそれを実行した場合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 
関連する問題