2010-12-15 22 views
0

私はtxtファイルを開いて読み込もうとしていますが、タイプエラーが発生しています。あなたが正しい構文と共に推論を提供できれば、私は下に起こっていることをよりよく把握しようとしています。ここでは、コードがだ、それは私が考えるかなり簡単です:Python型エラー(おそらく単純)

from sys import argv 

script = argv 
filename = argv 

txt = open(filename) 

print "Here's your file %r" %filename 
print txt.read() 

Muchasグラシアス

答えて

4

argvリスト、ではない文字列です。それはそれははるかに複雑に見えますが、それは拡大してより柔軟、より簡単にコマンドラインユーティリティを行います

>>> import argparse 
>>> parser = argparse.ArgumentParser(description="Print a file.") 
>>> parser.add_argument("path", type=str, nargs=1, help="Path to the file to be printed.") 
_StoreAction(option_strings=[], dest='path', nargs=1, const=None, default=None, type=<type 'str'>, choices=None, help='Path to the file to be printed.', metavar=None) 
>>> args = parser.parse_args() 
>>> print args 
Namespace(path=[<...>]) 

、そして:あなたは

script = argv[0] 
filename = argv[1] 

が直接sys.argvを渡すのではなく、argparseを使用することを検討してほしいですコマンドラインで適切なドキュメントを確実に取得します。

2

まず、argvは引数のリストです。 Openはリストを取らない。そのため、タイプエラーが発生しています。オープン

第二には、イエスのモードがオプションである(2つのパラメータ、ファイル名とモードを取るが、それをそこに置くのが習慣に取得する(必要がある)。リストになります

import sys 

script = sys.argv[0] 
filename = sys.argv[1] 

txt = open(filename, 'r') 

print "Here's your file %r" %filename 
print txt.read() 
+0

モードを入れるのが習慣に取得するのはなぜ?デフォルト引数のポイントは、それは必ずしも必要ではないということです。 – katrielalex

+0

私は見ていたのでを使用する必要がありますモードがオプションの場合、デフォルト値はです。つまり、このコードを読んでいる人は誰でも同じことをしなければならないかもしれません。どちらが悪いですか。 – Falmarri

+0

バイナリまたはテキストモードフラグも追加します。それはWindowsに違いがあります。そして、Pythonでは*常に*違いがありますので、入れてください。 –

0

のargvと交換し、ファイル名は文字列であるべきである。

おそらくfilename = argv[1]

関連する問題