Python:将文本文件中的特定单词大写

时间:2017-11-22 14:53:43

标签: python python-3.x text

我正在尝试编写一个python脚本来格式化SQL代码以提高可读性。

例如。将特定的小写单词转换为大写:select - >选择

我正在尝试使用Python中的读写功能。但是,我被卡住了。这是我的代码:

words = ['select', 'from', 'where']
w = open('03_TextUpper.txt', 'w')

with open('03_TextLower.txt', 'r') as file:

    for line in file:
        for word in line.split():
            if word in words:
                w.write( word.upper() )

    w.write( line ) 

这会打印出特定单词的大写字母,但不会删除小写单词。

有没有更好的方法在Python中编写它?

4 个答案:

答案 0 :(得分:1)

我建议你这样做有两个阶段:

words = ['select', 'from', 'where']

with open('03_TextUpper.txt') as f_input:
    text = f_input.read()

with open('03_TextUpper.txt', 'w') as f_output:
    for word in words:
        text = text.replace(word, word.upper())

    f_output.write(text)

首先将整个文件读入内存并进行必要的更改。接下来打开文件进行写入并将其写回。

它使用Python字符串replace()将每个单词替换为大写替代。它可以一次完成整个文件,无需拆分文件。

使用正则表达式来识别单词边界可以改善这一点:

import re

words = ['select', 'from', 'where']
uppercase = lambda x: x.group(1).upper()
re_replace = re.compile(r'\b({})\b'.format('|'.join(words)))

with open('03_TextUpper.txt') as f_input:
    text = f_input.read()

with open('03_TextUpper.txt', 'w') as f_output:
    f_output.write(re_replace.sub(uppercase, text))

正则表达式能够在一次调用中执行所有替换。

答案 1 :(得分:0)

您在同一个实例中打开读写操作。尝试关闭读取功能并在完成后打开新的写入功能,它可以解决问题。

答案 2 :(得分:0)

您可以迭代文件一次,然后将生成的列表写入输出文件:

words = ['select', 'from', 'where']
data = [i.strip('\n').split() for i in open('03_TextLower.txt')]
new_words = [[b for b in i if b.lower() in words] for i in data]

with open('03_TextUpper.txt', 'w') as f:
   for line in new_words:
       for word in line:
          f.write("{}\n".format(word))

答案 3 :(得分:0)

第三方库sqlparse将执行此操作:

>>> sql = 'select * from foo where id in (select id from bar);'
>>> print sqlparse.format(sql, reindent=True, keyword_case='upper')
SELECT *
FROM foo
WHERE id IN
  (SELECT id
   FROM bar);