2017-06-04 6 views
0

は、私は次のように数字のペアを持つファイルがあります:Pythonでテキストの1桁の数字を置き換える方法は?

0,21 
0,52 
0,464 
100,478 
1,101 
1,729 
1,730 

をそして私は「2000」とシングル「0」を置き換えたいです。予想される出力は次のようになります。

2000,21 
2000,52 
2000,464 
100,478 
1,101 
1,729 
1,730 

しかし、私のコードで、それは2000年代にすべて0に変更し、私は、この出力で終わる:

2000,21 
2000,52 
2000,464 
120002000,478 
1,120001 
1,729 
1,732000 

私のコードは次のとおりです。

textToSearch = "0" 
textToReplace = "2000" 
fileToSearch = "example.csv" 
with fileinput.FileInput(fileToSearch, inplace=True, backup='.bak') as file: 
    for line in file: 
     print(line.replace(textToSearch, textToReplace), end='') 

プラス:カンマの左側に何個の0があるかわからないので、0の数を変更することはできません。ファイルは無作為に生成されます。時には12個の0と時には1つしかないこともあります。 私はこれを試してみました:それは、それぞれそれら"102000""202000"作っているよう

textToSearch = "0," 
textToReplace = "2000," 
fileToSearch = "example.csv" 
with fileinput.FileInput(fileToSearch, inplace=True, backup='.bak') as file: 
    for line in file: 
     print(line.replace(textToSearch, textToReplace), end='') 

しかし、この時間は、それは、そのよう"100""200"などの数字のために働いていません。

どうすれば修正できますか?

答えて

1

これは、データをファイルに保存するためにわずかに変更されています。基本的なアルゴリズムは変更されていません。

import re 

temp = [] 

with open("example.csv", "r") as inputf: 
    for line in inputf: 
     line = line.strip("\n") 
     match = re.search("^0", line) 
     if match: 
      list1 = line.split(",") 
      list1[0] = 2000 
      line = str(list1[0]) + "," + str(list1[1]) 
     temp.append(line) 
inputf.close() 

# overwrite original file 

with open("example.csv", "w") as outputf: 
    for item in temp: 
     outputf.write(item + "\n") 
outputf.close() 
0

以下のように、「正規表現」インポートモジュールを使用するようにしてください。

import re  

fileToSearch = "example.csv" 

    with open(fileToSearch) as file: 
     for line in file: 
      line = line.strip("\n") 
      match = re.search("^0", line) 
      if match: 
       list1 = line.split(",") 
       list1[0] = 2000 
       line = str(list1[0]) + "," + str(list1[1]) 
      print(line) 

これは、あなたが望む結果を生むようです。

+0

ありがとうございます!出力(行)をファイルに書き込めません。私はopen(fileToSearch、 'w')をfileとして変更し、最後にfile.write(line)を追加しました。しかし、それは動作しません。あなたはおそらく理由を知っていますか? – bapors

0

KISS方法論。 regexpで遊んでいる間、私はあなたが使用したいと考えるかもしれないもっと短くて簡単な解決策を思いつきました。

import re   

with open("example.csv", "r") as inputf: 

    randstr = inputf.read() 
    regex = re.compile(r"\b0\b") 
    result = re.sub(regex, "2000", randstr) 

with open("example.csv", "w") as outputf: 
    outputf.write(result) 
関連する問題