0

これはコードです:

def edit(aFile):
   s = ''
   filename = getMediaPath() + aFile
   inputfile = open(filename, 'r')
   read = inputfile.readlines()
   inputfile.close()
   for lines in read:
     lines = lines.lower()
     lines = lines.replace("it's", "this is")
     lines = lines.capitalize()
     s = s + str(lines)
   newfile = getMediaPath() + 'happyEdited.txt'
   x = open(newfile, 'w')
   x.write(s)
   x.close()

エラーは「inputfile =」行にあります。「I/O 操作に失敗しました。ファイルを読み込もうとしましたが、できませんでした。ファイルが存在することは 確かですか?存在する場合は、正しいディレクトリ/フォルダを指定しましたか?」**

メディア パスを含む文字列としてaFileを入力してみました。aFileをメディア パスと同じに設定しようとしましたが、何も機能しません。パラメータを取り出して、コード内のaFileを .txt ファイルの名前に置き換えると、コードが機能します。

ありがとうございます!

4

3 に答える 3

1

いくつかの提案:

デバッグ用のチェックルーチンを含めることができます。

import os
print os.path.exists(filename) 
print os.path.isfile(filename)

また、使用することをお勧めします

with open(filename,'r') as inputfile:
    # do your stuff

それ以外の

inputfile = open(filename, 'r')
# do your stuff
inputfile.close()

は、 で問題が発生した場合withにファイル ストリームが確実に閉じられるようにするためです。より便利な方法です。# do your stuff sectionexceptswith

そして、ケースを機能させるために必要なものは次のとおりだと思います。

newfile = getMediaPath() + '/happyEdited.txt'
于 2013-07-26T15:35:02.273 に答える
0

ここでの主な問題はおそらく、相対ファイル パスを表す単純な文字列を使用していることです。完全なトレースバックを提供していただければ、より適切な回答を差し上げることができます。

これにより、多くの場合問題が発生するため、常に絶対パスを使用することをお勧めします。

では、絶対パスとは何ですか?ドライブから実際のファイルの保存先までのパスです。例: C:/Foo/Bar/Cheese/happy.py. 相対ファイル パスは、現在のディレクトリからの相対パスです。たとえば、コマンドラインで @C:/Foo/Bar/Cheese/happy.pyを使用していて、同じディレクトリに別のファイルがあった場合、たとえばmore.pyとして参照できますが./more.py、これにより、現在直面しているいくつかの問題が発生する可能性があります。

それで、解決策は何ですか?私が言ったように、絶対パスを使用してください。というモジュールを使用しますos

したがって、次のようなものです。

import os

file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "name_of_file_in_current_dir")).replace(os.pardir, "/")

ここで、これが何を意味するかを説明しましょうos.path.abspath。絶対パスを提供します。os.path.join柔軟な方法でパスを結合でき、フォルダを結合できます。os.path.dirnameは、指定されたファイル (この場合は ) の絶対パスを提供します__file____file__特殊変数です。最後に、OS は内部的にディレクトリを分離するためにさまざまな方法を使用//でき\ます\\。さて、これは/すべてのシステムで機能するため、最も効果的です。os.pardirWindows、Linux、および Unix のすべてのシステムで動作し、コードを移植可能にするために使用します。:D

また、withステートメントを使用することをお勧めします。そのようです:

with open(file_path) as file:

これはその周りにブロックを配置するのと同じですtry/catchが、一度は単純な線で。また、ファイル ストリームを開いたり閉じたりします。

于 2013-07-26T15:35:24.753 に答える