2

今日からpythonの勉強を始めました。これは、テキスト ファイルの読み取り、1 行の書き込み、または削除を行う単純なスクリプトです。書き込みと削除は問題なく実行されますが、「r」(読み取り) オプションを選択するとエラーが発生します。

IOError: [Errno 9] ファイル記述子が正しくありません

ここで何が欠けていますか...?

from sys import argv

script, filename = argv

target = open(filename, 'w')

option = raw_input('What to do? (r/d/w)')

if option == 'r':   
    print(target.read())

if option == 'd':
    target.truncate()
    target.close()  

if option == 'w':
    print('Input new content')
    content = raw_input('>')
    target.write(content)
    target.close()  
4

1 に答える 1

9

ファイルを書き込みモードで開いたため、読み取りを実行できません。次に'w'、ファイルを自動的に切り捨てるため、切り捨て操作は役に立ちません。r+ここでモードを使用できます:

target = open(filename, 'r+')

「r+」は、読み取りと書き込みの両方でファイルを開きます

ファイルを開くときにステートメントを使用するとwith、ファイルが自動的に閉じられます。

option = raw_input('What to do? (r/d/w)')

with  open(filename, "r+")  as target:
    if option == 'r':
        print(target.read())

    elif option == 'd':
        target.truncate()

    elif option == 'w':
        print('Input new content')
        content = raw_input('>')
        target.write(content)

@abarnert が示唆しているように、ユーザーが入力したモードに従ってファイルを開く方がよいでしょう。これは、読み取り専用のファイルが'r+'最初にモードでエラーを発生させる可能性があるためです。

option = raw_input('What to do? (r/d/w)')

if option == 'r':
    with open(filename,option) as target:
        print(target.read())

elif option == 'd':
    #for read only files use Exception handling to catch the errors
    with open(filename,'w') as target:
        pass

elif option == 'w':
    #for read only files use Exception handling to catch the errors
    print('Input new content')
    content = raw_input('>')
    with open(filename,option) as target:
        target.write(content)
于 2013-05-13T06:53:18.340 に答える