2015-05-24 2 views
0

Спасибо за помощь до сих пор ребята! Огромная помощьPython Удалить строки, содержащие небуквенные маркеры

Так что это мой сценарий до сих пор,

import re 
bad_words = '[^a-zA-Z\d\s:]' 

with open('keywords.txt', encoding="utf8") as oldfile, open('newfile.txt', 'w') as newfile: 
    for line in oldfile: 
     if not re.search(bad_words, line): 
      newfile.write(line) 

lines_seen = set() # holds lines already seen 
outfile = open('cleankeywords.txt', "w") 
for line in open('newfile.txt', "r", encoding="utf8"): 
    if line not in lines_seen: # not a duplicate 
     outfile.write(line) 
     lines_seen.add(line) 
outfile.close() 

Как мне сделать его более эффективным, удалить средний файл обрабатывается: newfile.txt

Так что оба действия происходят после того, как друг с другом , Кроме того, существует способ специфического расположения входного файла с использованием чего-то типа tkinter, а также имени выхода и каталога

Спасибо!

+0

Используйте [регулярное выражение] (https://docs.python.org/2/library/re.html), чтобы проверить строку –

+0

Вам даже не требуется регулярное выражение. –

+0

'if all (i в string.ascii_letters + string.digits для i в строке): newfile.write (строка)' –

ответ

0

Как вы его написали, вы проверяете, находится ли целая строка в строке. Если bad_words - это регулярное выражение, вы должны использовать модуль re для его работы.

import re 
bad_words = '[^a-zA-Z\d\s:]' 

with open('keywords.txt') as oldfile, open('newfile.txt', 'w') as newfile: 
    for line in oldfile: 
     if not re.match(bad_words, line): 
      newfile.write(line) 

Ваш код будет работать, если у вас есть список (или строка) из неразрешенных символов, то вы можете использовать свой алгоритм для перебора над ним и проверить:

bad_words = ['/',':','.','%','#','$','*',.....] 
#or if bad_words was a string like '%$£#@!¨&(*&)' 
if not any(bad_word in line for bad_word in bad_words): 
    newfile.write(line) 

Но, как вы имея дело с регулярными выражениями, вы должны использовать re.

+0

Это не правильный класс символов, не означает ли вы: '' [^ a-zA -Z \ d \ s:] '' –

+0

Спасибо Малик – RafaelC

+0

Кроме того, я бы использовал' re.search' вместо 're.match' –

Смежные вопросы