2

私はこれを熱心にグーグルで検索してきましたが、実際に絞り込むことはできません。値のcsvファイルを解釈しようとしていますが、十分に一般的な動作です。しかし、私は 1,000 を超える値、つまり引用符やコンマを含む値によって罰せられています。行から数値のリストを作成する csv リーダーを使用して、ちょっとしたことを回避しましたが、後でコンマを選択する必要があります。

純粋に学術的な理由から、正規表現で文字列を編集するより良い方法はありますか? から08/09/2010,"25,132","2,909",65008/09/2010,25132,2909,650

(あなたがVimに興味があるなら、基本的に私はこれにPythonを置きたいです: :1,$s/"\([0-9]*\),\([0-9]*\)"/\1\2/g:D )

4

4 に答える 4

2

モジュールを第 1 段階の解析に使用csvし、正規表現は結果を数値に変換できるかどうかを確認するためだけに使用します。

import csv, re
num_re = re.compile('^[0-9]+[0-9,]+$')
for row in csv.reader(open('input_file.csv')):
  for el_num in len(row):
    if num_re.match(row[el_num]):
      row[el_num] = row[el_num].replace(',', '')

...ただし、正規表現をまったく使用しない方がおそらく高速です。

for row in ([item.replace(',', '') for item in row]
            for row in csv.reader(open('input_file.csv'))):
  do_something_with_your(row)
于 2012-04-23T14:35:02.417 に答える
1

コンマは数字でのみ表示され、それらのエントリは常に引用されると仮定すると、あなたが探しているのは次のとおりです。

import re

def remove_commas(mystring):
    return re.sub(r'"(\d+?),(\d+?)"', r'\1\2', mystring)

更新:以下にcdarkeのコメントを追加すると、以下は任意の長さの数値に対して機能するはずです。

import re

def remove_commas_and_quotes(mystring):
    return re.sub(r'","|",|"', ',', re.sub(r'(?:(\d+?),)',r'\1',mystring))
于 2012-04-23T14:28:25.433 に答える
0

任意の長さの数値からコンマを削除するための簡単な正規表現を次に示します。

re.sub(r'(\d+),?([\d+]?)',r'\1\2',mystring)
于 2013-06-05T06:12:27.523 に答える
0

Python には正規表現モジュール「re」があります。

http://docs.python.org/library/re.html

ただし、この場合、「パーティション」機能の使用を検討することをお勧めします。

>>> s = 'some_long_string,"12,345",more_string,"56,6789",and_some_more'
>>> left_part,quote_mark,right_part = s.partition(")
>>> right_part
'12,345",more_string,"56,6789",and_some_more'
>>> number,quote_mark,remainder = right_part.partition(")
'12,345'

string.partition("character") は、文字列を 3 つの部分に分割します。最初に出現する "character" の左側に詰め込み、"character" 自体を詰め込み、右側に詰め込みます。

于 2012-04-23T14:29:45.947 に答える