n*w 发帖数: 3393 | 1 要parse很多文本文件,csv。需要把非法内容剔除,比如日期字段中的非日期,
numeric字段中的非numeric等。把213,323,324.324换成213323324.343等。
python合适做这个事情不?google的一下,好像python对类型转换比较弱? |
L*******r 发帖数: 1011 | 2 合适。
http://www.rosettacode.org/wiki/IsNumeric#Python
use string.split to get fields,
determine the numeric fields
then use float(f1) * 10000 + float(f2) * 100 + float(f3) ...
【在 n*w 的大作中提到】 : 要parse很多文本文件,csv。需要把非法内容剔除,比如日期字段中的非日期, : numeric字段中的非numeric等。把213,323,324.324换成213323324.343等。 : python合适做这个事情不?google的一下,好像python对类型转换比较弱?
|
d*******8 发帖数: 3182 | 3 s = '213,323,324.324'
s.replace(',', '')
n = float(s)
is it better?
BTW, how to 把213,323,324.324换成213323324.343等?? |
r****t 发帖数: 10904 | 4 >> locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8')
>> locale.atof('100,340.23')
100340.23
python 是 strong typed, 怎么说类型转换比较弱? 就用
try: return locale.atof(content)
except: return "Illegal"
这样就可以了。
【在 n*w 的大作中提到】 : 要parse很多文本文件,csv。需要把非法内容剔除,比如日期字段中的非日期, : numeric字段中的非numeric等。把213,323,324.324换成213323324.343等。 : python合适做这个事情不?google的一下,好像python对类型转换比较弱?
|
n*e 发帖数: 50 | 5 问题是他是csv里面带着 "," 的数字,假定不知道数字的位数有多少,不是很方便。
需要先知道怎么把那个数字field从两边的field里面分出来。
不过这个locale.atof我第一次见,收藏一下。
【在 r****t 的大作中提到】 : >> locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8') : >> locale.atof('100,340.23') : 100340.23 : python 是 strong typed, 怎么说类型转换比较弱? 就用 : try: return locale.atof(content) : except: return "Illegal" : 这样就可以了。
|
r****t 发帖数: 10904 | 6 这种 damaged csv file, 无论你用什么搞都会很麻烦的。
写这些 csv 的人,为什么不用 python csv module? 里面有必要的时候自动给字段加
引号的。
问题出在写数据的时候,读数据的人来 fix 很麻烦。
【在 n*e 的大作中提到】 : 问题是他是csv里面带着 "," 的数字,假定不知道数字的位数有多少,不是很方便。 : 需要先知道怎么把那个数字field从两边的field里面分出来。 : 不过这个locale.atof我第一次见,收藏一下。
|
n*e 发帖数: 50 | 7 所以从来就要加上 “
【在 r****t 的大作中提到】 : 这种 damaged csv file, 无论你用什么搞都会很麻烦的。 : 写这些 csv 的人,为什么不用 python csv module? 里面有必要的时候自动给字段加 : 引号的。 : 问题出在写数据的时候,读数据的人来 fix 很麻烦。
|
z***y 发帖数: 79 | 8 import csv
【在 n*w 的大作中提到】 : 要parse很多文本文件,csv。需要把非法内容剔除,比如日期字段中的非日期, : numeric字段中的非numeric等。把213,323,324.324换成213323324.343等。 : python合适做这个事情不?google的一下,好像python对类型转换比较弱?
|
r****t 发帖数: 10904 | 9 只要 field 之间是 " ," 或者 " ," 分隔的,用这个 locale.atof 就有办法, 不需
要知道数字位数是多少。
反过来讲,如果 field 之间是 "," (没空格)分隔的,单个 field 里面的数字也是用
一样的分隔,就是人眼睛也不知道该如何分。
【在 n*e 的大作中提到】 : 问题是他是csv里面带着 "," 的数字,假定不知道数字的位数有多少,不是很方便。 : 需要先知道怎么把那个数字field从两边的field里面分出来。 : 不过这个locale.atof我第一次见,收藏一下。
|