Python:仅将文件的内容转换为大写字符

时间:2013-01-11 15:08:07

标签: python

我正在尝试将一组文件的内容转换为仅大写字符。继承了我到目前为止的代码:

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)

当我运行它时,它会删除文件的内容。

3 个答案:

答案 0 :(得分:7)

您实际上并未编写该文件的内容。试试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打开文件时,具有该名称的任何现有文件都将被删除(请参阅here)。虽然这很好,但是你的语句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())

答案 1 :(得分: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()

答案 2 :(得分: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())