python 不删除标点符号

python not removing punctuation

我有一个文本文件,我想删除标点符号并将其另存为新文件,但它没有删除任何内容,不知道为什么?

代码:

def punctuation(string):
    punctuations = '''!()-[]{};:'"\,<>./?@#$%^&*_~'''

    for x in string.lower():
        if x in punctuations:
            string = string.replace(x, "")

            # Print string without punctuation
    print(string)


file = open('ir500.txt', 'r+')
file_no_punc = (file.read())

punctuation(l)

with open('ir500_no_punc.txt', 'w') as file:
    file.write(file_no_punc)

为什么要删除标点符号?

def punctuation(string):
    punctuations = '''!()-[]{};:'"\,<>./?@#$%^&*_~'''

    for x in string.lower():
        if x in punctuations:
            string = string.replace(x, "")

    # return string without punctuation
    return string



file = open('ir500.txt', 'r+')
file_no_punc = (file.read())

file_no_punc = punctuation(file_no_punc)

with open('ir500_no_punc.txt', 'w') as file:
    file.write(file_no_punc)

解释:

我只将 punctuation(l) 更改为 file_no_punc = punctuation(file_no_punc),将 print(string) 更改为 return string

1) punctuation(l) 中的 l 是什么?
2) 您正在调用 punctuation() - 它工作正常 - 但不要使用它的 return 值
3) 因为它当前没有 return 一个值,只是打印它 ;-)

请注意,我只做了很小的改动就可以让它正常工作。您可能想 post 到我们的 code review 网站,看看如何改进它。

此外,我建议您获得一个好的 IDE。在我看来,您无法击败 PyCharm 社区版。了解如何使用调试器;它是你最好的朋友。设置断点,运行代码;它会在遇到断点时停止;然后您可以检查变量的值。

取出文件 reading/writing,您可以像这样从字符串中删除标点符号:

table = str.maketrans("", "", r"!()-[]{};:'\"\,<>./?@#$%^&*_~")

# # or maybe even better
# import string
# table = str.maketrans("", "", string.punctuation)

file_with_punc = r"abc!()-[]{};:'\"\,<>./?@#$%^&*_~def"
file_no_punc = file_with_punc.lower().translate(table)
# abcdef

我在哪里使用 str.maketrans and str.translate.

请注意 python 字符串是不可变的。无法更改给定的字符串;您对字符串执行的每个操作都将 return 一个新实例。