2014-02-18 2 views
0

Я пытаюсь удалить все пустое пространство в моем файле данных и заменить его на одну запятую , В настоящее время я использую regex для этого.найти все пробелы в строке

Я получаю сообщение об ошибке:

Traceback (most recent call last): 
    File "parse_prime.py", line 12, in <module> 
    newline = line.replace(whitespace,",") 
TypeError: expected a character buffer object 

Вот мой код

import re 

token = re.compile(r'\s*') 
f = open("prime_data.txt","r") 
fw = open("prime_out.txt", "w+") 

primelist = [] 

for line in f.readlines(): 
    findtoken = re.search(token, line) 
    replacetoken = line.replace(findtoken,",") 

    fw.write(newline) 

Я не думаю, что я ищу регулярное выражение правильно. Я думаю, что остановлюсь, как только будет найден первый набор пробелов. Как я просматриваю всю строку?

файл данных в этом формате

43 3 2 2 123 3 
+0

Почему бы просто не использовать: 'для строки в ...(): fw.write (re.sub (r '\ s +', ',', line))'? – NullUserException

ответ

4

Вы должны использовать token.sub() здесь, и использовать правильный шаблон (матч по крайней мере один символ пробела или более):

token = re.compile(r'\s+') 

for line in f: 
    newline = token.sub(line, ',') 
    fw.write(newline) 

Я упал вызов .readlines(); файловые объекты могут быть закодированы по напрямую, нет необходимости читать их в память оптом.

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

for line in f: 
    newline = ','.join(line.split()) 
    fw.write(newline + '\n') 

Вы пытались назвать str.replace() который принимает только строки, но вы проходили в значении re.MatchObject вместо этого.

+0

Кроме того, '\ s +' лучше. Не захотеть заменить даже «пустые» совпадения на ',', правильно? – Jerry

+0

@ Джерри: совершенно верно, спасибо. –

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