从文件中替换“ - ”的每个实例

时间:2012-02-03 18:15:11

标签: python file

我有一个包含以下信息的文件:

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 个答案:

答案 0 :(得分:3)

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 :(得分: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('-'))

答案 2 :(得分:0)

尝试使用此

replace("-",",");

答案 3 :(得分: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'