0

私はコーディングを学び、Python 2.7 から始めたばかりです。Qpython 3で開くテキストファイルを取得するにはどうすればよいですか?

# Opening a file

inp = raw_input ("Enter a File Name: ")

#Optional guardian to capture incorrect filenames
try:

fhand = open('words.txt')
except:
    print "Invalid Filename "
    exit()
#End of Guardian code

count = 0
for line in fhand:
    count = count + 1
print "Line Count", count

これから得られるのはエラーメッセージだけです。

4

3 に答える 3

1

エラー メッセージIOError: [Errno 2] No such file or directory: 'words.txt'は、Python がファイルwords.txt を探している場所でファイルを見つけることができないことを意味します。

Python はどこでファイルを探していますか?

に渡された文字列がopen()絶対パスのように見える場合、Python はそこを検索します。'words.txt'は絶対パスのように見えないため、相対パスとして扱われます。何に対して?予想とは異なり、Python ソース ファイルに対して相対的ではなく、現在の作業ディレクトリに対して相対的です。

対話型シェルからスクリプトを呼び出した場合は、適用可能な現在の作業ディレクトリがわかっている可能性があります。Qpythonで開発するときにそれができる/できる人であるかどうかはわかりません。しかし、そうでない場合でも心配はいりません。

import os
print os.getcwd()

現在の作業ディレクトリのパスを出力します。これは、ファイルをどこに置くか、またはファイルにアクセスする方法を理解するのに役立ちます。

Pythonでのインデントの問題

実際の例外のメッセージが出力されることは、デバッグに適しています。ただし、except ブロックがあるため、意図したものではない可能性があります。「無効なファイル名」を出力したい場合は、try ブロックのインデントを修正する必要があります。(fhand = open('words.txt')に対してインデントする必要がありますtry:。)

これがまったく実行されたのに、IndentationError: expected an indented block.

適切な例外処理

正しく処理できる (そして実行できる) ものだけをキャッチする

tryブロックが修正されると (上記のセクションを参照)、exceptブロックはブロック内のすべての例外をキャッチすることに注意してくださいIOError: [Errno 2] No such file or directoryopenこれは、割り当てる RAM が不足しているなど、 にまったく別の問題がある場合でも、「無効なファイル名」を出力することを意味します。

exceptそのため、ブロックで処理する特定のエラーをキャッチしてみてください。

エラー メッセージに stderr を使用する

print >> sys.stderr, "Invalid Filename "

標準出力ストリームの代わりに標準エラー ストリームに出力できます。これは、スクリプトの標準出力がファイルにリダイレクトされる場合に役立ちます。

ユーザー入力の使用

現在、ハードコードされたファイル名を使用しており、プロンプトが表示されたときにユーザーが入力した名前で何もしていませんEnter a File Name:。デバッグが完了したら、ハードコードされたファイル名を に置き換えると思いますimp。ここではユーザー入力が保持されます。置き換えるだけで、ユーザーはファイル名だけでなく、スクリプトがアクセスするファイル パス (現在の作業ディレクトリに対する絶対パスまたは相対パス) を指定できるようになることに注意してください。これは、許可したい場合とそうでない場合があります。

于 2015-06-27T22:23:53.560 に答える
-1

ここでqpythonに問題があると思います。自分で理解しようとしましたが、未解決のqpythonの問題である可能性があります

print(os.getcwd()) only prints a single slash '/' for me so I have had to resolve to putting the full path in

rdir = "/mnt/sdcard/com.hipipal.qpyplus/projects3/fileio/ "
with open(rdir+"test.txt", "wt") as out_file:
    out_file.write("This text is going to _____________the out file\n look at it and see")

このように読み書きできます。

于 2015-07-08T00:03:18.067 に答える