2012-02-03 2 views
-1

У меня есть файл, который содержит информацию, как ниже:Заменить каждый экземпляр «-» из файла

1/1/2010 
1-2-3-4 
1 
1/2/2010 
1-5-6-7 
111 
etc. 

Я хочу, чтобы иметь возможность написать это в другой файл, где каждый экземпляр '-' заменяется ','. Я попытался с помощью str.split('-') и понимаю, что я не могу написать список в файл после того, как эта ошибка
TypeError: must be string or read-only character buffer, not list
Я также попытался с помощью str.replace('-', 'i'), но все это дает мне еще одна ошибка
TypeError: replace() takes at least 2 arguments (1 given)
Может кто-нибудь мне точку в правильном направление?

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

{0:[['1/1/2010], ['1', '2', '3', '4'], ['1']], 1: [['1/2/2010'], ['1', '5', '6', '7'], ['111']], etc.} 

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

>>> def test(filename): 
import re 
input_file = open(filename, 'r') 
output_file = open('test.txt', "w") 
for line in input_file: 
    line = line.strip() 
    line = re.sub('-', ',', line) 
    output_file.write(line) 
    output_file.write('\n') 
input_file.close() 
output_file.close() 
+1

Следует ли интегрировать его в другую программу? Вам нужно использовать python для этого шага? Если нет, то почему не команда оболочки: cat file | tr "-" "," – Benedict

ответ

3
def replaceAll(infilepath, outfilepath): 
    infile = open(infilepath) 
    outfile = open(outfilepath, 'w') 
    for line in infile: 
     outfile.write(line.replace('-', ',')) 
    infile.close() 
    outfile.close() 

EDIT: Вот немного более вещий способ сделать это:

def replaceAll(infilepath, outfilepath): 
    with open(infilepath) as infile, open(outfilepath, 'w') as outfile: 
     for line in infile: 
      outfile.write(line.replace('-', ',')) 
+0

Это работает. Спасибо за предоставление немного больше, чем 'replace ('-', ',')'. – Timmay

0

попробовать использовать это

replace("-",","); 
+0

Возможно, это связано с тем, что я недостаточно знаю Python, но когда я использую попытки чтения строк в файле, это не работает. то есть 'line.replace (" - ",", ")' все, что он скопировал в файл, был первой строкой из файла, который он читал. – Timmay

+0

Посмотрите на самую нижнюю часть этой страницы из документов Python: http://docs.python.org/library/string.html –

+0

'replace' возвращает новую' str'. Тот, который вы вызываете, не изменяется. Это далеко не очевидно и приводит к уродливому коду, например 'message = message.replace (" - ",", ")'. С другой стороны, точка с запятой в конце этого ответа не принадлежит. – ArtOfWarfare

1

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

import os, re 

data = """1/1/2010 
1-2-3-4 
1 
1/2/2010 
1-5-6-7 
111""" 

regex = re.compile(os.linesep.join([r'(\d{1,2}/\d{1,2}/\d{4})', 
            r'(\d+-\d+-\d+-\d+)', 
            r'(\d+)'])) 
groups = {} 
n = 0 
for match in regex.finditer(data): 
    groups[n] = [[match.group(1)], match.group(2).split('-'), [match.group(3)]] 
    n += 1 

>>> groups 
{0: [['1/1/2010'], ['1', '2', '3', '4'], ['1']], 1: [['1/2/2010'], ['1', '5', '6', '7'], ['111']]} 

Что касается вашего вопроса (как заменить дефисы запятыми), при условии, что вы прочитали свой файл в строке data, вы можете заменить все дефисы запятыми, используя следующую строку:

data = data.replace('-', ',') 

Можно также разделить строку на всех '-', а затем использовать ','.join(), хотя использование str.replace() проще:

data = ','.join(data.split('-')) 
+0

Я пробовал выше всего лишь с образцом (9 строк) моих данных, и он вернул '{}'. – Timmay

+0

Если ваши строки имеют какие-либо конечные пробелы или у файла есть странные окончания строк, это может не сработать, можете ли вы изменить свой вопрос с помощью строк, которые вы его пробовали? –

+0

Я пробовал это точно, как у вас есть это выше, но когда я набираю группы, он все равно дает мне '{}'. Используете ли вы 2.7.2? – Timmay

0

Я создал тестовый файл, чтобы показать вам. Во-первых, читать в:

>>> contents = open('test.txt', 'r').read() 
>>> contents 
'blah-blah\nsomething-\n' 

Используйте строку заменить метод замены вхождений - с ,:

>>> contents_replaced = contents.replace('-', ',') 
>>> contents_replaced 
'blah,blah\nsomething,\n' 

записать его обратно в файл и читать его, чтобы убедиться, что он был обновлен :

>>> open('test2.txt', 'w').write(contents_replaced) 
>>> open('test2.txt', 'r').read() 
'blah,blah\nsomething,\n' 
Смежные вопросы