как удалить символы из списка, а затем положить его обратно? - PullRequest
0 голосов
/ 21 ноября 2019

Итак, мне нужно создать код, который читает из текстового файла, а затем я преобразовываю текст в список для анализа (преобразования единиц). То, что я хочу сделать, это удалить пунктуацию из определенных слов из списка, чтобы проанализировать ее, а затем поместить ее черным в те же места, что и раньше. Этот список всегда может измениться, потому что код должен работать для каждого текста, который я даю.

Как разместить символы обратно точно в тех местах, где они были раньше? Я не могу использовать какие-либо пакеты для этого.

punct=['?', ':', ';', ',', '.', '!','"','/']
size = {'mm':1, 'cm':10, 'm':100, 'km':1000}
with open('random_text','r') as x:
    LIST=x.read().split() 
    for item in LIST:
        if item[:-1] in size.keys() and item[-1] in punct:
            punct_item=item
            non_punct_item=item[:-1]
            symbol=item[-1]

1 Ответ

2 голосов
/ 21 ноября 2019

Что ж, чтение файла ничего не изменит, поэтому, если вы прочитаете файл один раз и внесете все необходимые изменения (в этом случае удалите пунктуацию). Затем, когда вам снова понадобится пунктуация, просто перечитайте файл еще раз, и все должно быть в том же положении.

Более быстрый подход был бы:

punct=['?', ':', ';', ',', '.', '!','"','/']
size = {'mm':1, 'cm':10, 'm':100, 'km':1000}
# Do all modifications you need 
words_temp = None
with open('file1.txt','r') as file:
    words = file.read().split() 
    words_temp = words
    for item in words:
        if item[:-1] in size.keys() and item[-1] in punct:
            punct_item=item
            non_punct_item=item[:-1]
            symbol=item[-1]

words = words_temp
del words_temp

Это был более простой способ сделать это, другой способ - реализовать словарь с ключом, являющимся индексом удаляемого символа, изначение - это сам персонаж. Для этого подхода вам нужно будет выполнить итерацию один раз по всему файлу, чтобы построить этот словарь, а затем выполнить итерацию еще раз, чтобы добавить их обратно. Пример кода ...

tracker = dict()
punct=['?', ':', ';', ',', '.', '!','"','/']
words = list("If it walks like a duck, and it quacks like a duck, then it must be a duck. I love python!")
print("".join(words))
# If it walks like a duck, and it quacks like a duck, then it must be a duck. I love python!

# Removing the punct. 
i = 0
while i < len(words): 
    if words[i] in punct:
        tracker[i+len(tracker.keys())] = words[i]
        words.pop(i)
    i+=1


print("".join(words))
# If it walks like a duck and it quacks like a duck then it must be a duck I love python

# Adding the punct back 
for k,v in tracker.items():
        words = words[:k] +  [v] + words[k:]

print("".join(words))
# If it walks like a duck, and it quacks like a duck, then it must be a duck. I love python!
...