Заменить каждый экземпляр '-' из файла - PullRequest
0 голосов
/ 03 февраля 2012

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

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()

Ответы [ 4 ]

3 голосов
/ 03 февраля 2012
def replaceAll(infilepath, outfilepath):
    infile = open(infilepath)
    outfile = open(outfilepath, 'w')
    for line in infile:
        outfile.write(line.replace('-', ','))
    infile.close()
    outfile.close()

РЕДАКТИРОВАТЬ: Вот немного более питонический способ сделать это:

def replaceAll(infilepath, outfilepath):
    with open(infilepath) as infile,  open(outfilepath, 'w') as outfile:
        for line in infile:
            outfile.write(line.replace('-', ','))
1 голос
/ 03 февраля 2012

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

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 голосов
/ 03 февраля 2012

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

>>> 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'
0 голосов
/ 03 февраля 2012

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

replace("-",",");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...