Форум сайта python.su
Добрый день, друзья!
Есть csv-файл.
В нем могут быть числа разного формата (зависит от локали того кто сохранял файл)
Могут быть варинаты:
1,343,456.00
1.343.456.00
1,343,456,00
1 343 456.00
1343456.00
1343456
Можно ли стандратными средствами перевести такую строку в число?
Или только самому парсить строку (регуляркой)?
Подскажите плиз
Офлайн
можно убрать все точки и запятые в принцыпе и работать как с иинтом
а на выводе если надо уже делить правильно
разумеется это если все данные однотипные
к примеру
12,3 + 1,2 совершенно не тоже самое что 1,23 + 1,2
Но в вашем примере 1,343,456,00 и 1.343.456.00 и 134345600
Отредактировано ZerG (Янв. 23, 2017 12:59:23)
Офлайн
ZerG
можно убрать все точки и запятые в принцыпе и работать как с иинтом а на выводе если надо уже делить правильно разумеется это если все данные однотипные к примеру 12,3 + 1,2 совершенно не тоже самое что 1,23 + 1,2Но в вашем примере 1,343,456,00 и 1.343.456.00 и 134345600
Офлайн
ivan812Да тут разговоров больше чем кода понадобится
То есть, стандартных функций для этого нет?
from itertools import dropwhile s = [ '.03', '1,343,456.03', '1.343.456.04 ', '1,343,456,05', '1 343 456.06', '1343456.03', '1343456' ] def normalize(str_val): str_val = str_val.strip() try: sep = dropwhile(lambda x: x not in ",.", str_val[::-1]).next() h, t = str_val.rsplit(sep, 1) h = (h or "0").replace(" ", "")\ .replace(",", "")\ .replace(".", "") return float(h + "." + t) except StopIteration: return float(str_val) for i in s: print(normalize(i))
Офлайн
зависит от локали того кто сохранял файлВобще это корень проблемы! Она вылезет потом еще и не в одном месте.
Офлайн
FishHook
Офлайн
ivan812Файлы csv обрабатываются модулем csv. Какие там числа и в каком формате - это не важно. Если это csv он может быть разобран только одним способом - по спецификации csv-формата.
Есть csv-файл.
ivan812Вот функция должна принимать строку, менять её как-то, переводить в число и возвращать это число.
Могут быть варинаты:
1,343,456.00
1.343.456.00
1,343,456,00
1 343 456.00
1343456.00
1343456
Отредактировано py.user.next (Янв. 24, 2017 03:21:34)
Офлайн
ivan812
То есть, стандартных функций для этого нет? Только самому обрабатывать такие записи чесел?
Офлайн