2012-02-03 15 views
-1

私は以下のような情報が含まれているファイルがあります:私は'-'のすべてのインスタンスが置き換えられ、別のファイルにこれを書くことができるようにしたいのすべてのインスタンスを置き換えファイルから

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

','。私は、私はまた、str.replace('-', 'i')を使用してみましたが、このすべては私を与えるstr.split('-')を使用してみましたし、私は
TypeError: must be string or read-only character buffer, not list
このエラーを受け取った後、ファイルにリストを書き込むことはできません実現している誰もが、右に私を指すことができます別のエラー
TypeError: replace() takes at least 2 arguments (1 given)
です方向?

私も最終的にはこれがすべてのように

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

ちょうど更新のような辞書に置かれますので、私は最初の場所でstr.split()を使用しようとしていた理由は指摘しなければならない... 私が見つけましたこれは、言及されていない正規表現を使用して簡単に行うことができます。私はここで、フォーマットはこの一貫性がある場合は、あなたのファイルを解析するために正規表現を使用することをお勧め

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

編集:ここではこれを行うの少しより多くの神託の方法があります:

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

str.replace()を使用することは簡単ですが、あなたはまた、すべての'-'に文字列を分割し、その後','.join()を使用することができます。

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

私は私のデータのサンプル(9行)だけで上記を試し、 '{}'を返しました。 – Timmay

+0

あなたの行に余白があるか、ファイルに奇妙な行末がある場合、これはうまくいかないかもしれませんが、試した行で質問を編集できますか? –

+0

私はあなたがそれを持っている方法を正確に試しましたが、グループで入力すると '{}'が得られます。 2.7.2を使用していますか? – Timmay

0

私はあなたを表示するためにテストファイルを作成しました。必ずそれが更新されました作るために

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

書き、それをバックファイルへ出て、でそれを読む:

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

,-の発生を置き換えるための方法を置き換える文字列を使用してください:まず、それを読んで:

>>> open('test2.txt', 'w').write(contents_replaced) 
>>> open('test2.txt', 'r').read() 
'blah,blah\nsomething,\n' 
関連する問題