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文件的开头并写入(文件长度应该相同,但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 回答
0
import os
def test(x):
    with open(x, "r+b") as file:
        content = file.read()
        file.seek(0)
        file.write(content.upper())

如果您将文件名传入,上述内容应该可以工作x

以下是对单个文件执行相同操作的命令行版本,您可以从终端调用ls -1 | parallel python upper.py

import os, sys
with open(sys.argv[1], "r+b") as file:
    content = file.read()
    file.seek(0)
    file.write(content.upper())
于 2013-11-22T10:07:19.173 回答