python не удаляет пунктуацию - PullRequest
0 голосов
/ 29 января 2020

У меня есть текстовый файл, я хочу удалить пунктуацию и сохранить его как новый файл, но он ничего не удаляет, почему?

код:

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)

удаление любой пунктуации почему?

Ответы [ 2 ]

2 голосов
/ 29 января 2020
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) что такое l в punctuation(l)?
2) вы звоните punctuation() - что работает правильно - но не используете его возвращаемое значение
3) потому что в настоящее время оно не возвращает значение, просто печатает его; -)

Пожалуйста обратите внимание, что я сделал только минимальное изменение, чтобы оно заработало. Возможно, вы захотите опубликовать его на нашем сайте code code , чтобы узнать, как его можно улучшить.

Кроме того, я бы порекомендовал вам получить хорошую IDE. На мой взгляд, вы не можете победить PyCharm Community Edition. Узнайте, как использовать отладчик; это твой лучший друг. Установите точки останова, запустите код; остановится, когда достигнет точки останова; затем вы можете проверить значения ваших переменных.

0 голосов
/ 29 января 2020

вынимая файл для чтения / записи, вы можете удалить пунктуацию из строки, подобной этой:

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 и str.translate.

обратите внимание, что строки python являются неизменяемыми. нет способа изменить данную строку; каждая операция, выполняемая со строкой, будет возвращать новый экземпляр.

...