2

ファイルのセットの内容を大文字のみに変換しようとしています。これまでのコードは次のとおりです。

import os

def test():
    os.chdir("C:/Users/David/Files")
    files = os.listdir(".")
    for x in files:
        inputFile = open(x, "r")
        content = inputFile.read()
        with open(x, "wb") as outputFile:
                str.upper(content)

すべて実行すると、ファイルの内容が削除されます。

4

3 に答える 3

8

実際にファイルの内容を書いているわけではありません。試してみてくださいoutputFile.write(content.upper())

import os

def test():
    os.chdir("C:/Users/David/Files")
    files = os.listdir(".")
    for x in files:
        inputFile = open(x, "r")
        content = inputFile.read()
        with open(x, "wb") as outputFile:
                outputFile.write(content.upper())

でファイルを開くとw、その名前の既存のファイルはすべて消去されます (こちらを参照)。str.upper(content)これは問題ありませんが、ファイルに対して実際には何もしないため、問題を引き起こしているのはあなたのステートメントです-大文字にしますが、どこにも書き込みません(必要に応じてコンテンツ自体をcontent呼び出すこともできます)。.upper()コンテンツをファイルに書き込むには、outputFile作成した を取得contentし、メソッドを使用して書き込みますwrite()。ファイルを書き込むときに行ったように、別のwithステートメントを使用することもできます。これにより、ファイルも適切に閉じられます。

import os

def test():
    os.chdir("C:/Users/David/Files")
    files = os.listdir(".")
    for x in files:
        with open(x, "r") as inputFile:
            content = inputFile.read()
        with open(x, "wb") as outputFile:
            outputFile.write(content.upper())

r+bモードでファイルを開き、ファイルseekの先頭に ing して書き込み、読み取り、上書きすることもできます (ファイルの長さは同じであるtruncate()必要がありますが、必要に応じて読み取り後にファイルをクリアするために使用できます)。

import os

def test():
    x = 'testfile'
    with open(x, "r+b") as inputFile:
        content = inputFile.read()
        inputFile.seek(0)
        inputFile.write(content.upper())
于 2013-01-11T15:12:06.697 に答える
1
def test():
os.chdir("C:/Users/David/Files")
files = os.listdir(".")
for x in files:
    inputFile = open(x, "r")
    content = inputFile.read()
    with open(x, "wb") as outputFile:
            outputfile.write(str.upper(content))
            outputfile.close()
于 2013-01-11T15:12:09.113 に答える