Способы разбора документов и нормализации строк - PullRequest
0 голосов
/ 21 апреля 2011

Мне иногда кажется, что я слишком упрощаю / слишком усложняю разбор документов, вот что я часто делаю:

data = open('data.txt', 'rb').read()

for line in data.split('\n'):
    if not line.strip():
        continue

и это:

import csv

filenames=['first_name', 'last_name', 'email', 'postcode', 'telephone_no', ]
reader = csv.DictReader(open('data.csv', 'rb'), filenames=filenames)

for line in reader:
    if line['email'].strip()
        email = line['email'].strip()
    if line['first_name'].strip()
        first_name= line['first_name'].strip().capitalize()
    if line['last_name'].strip()
        last_name = line['last_name'].strip().capitalize()
    if line['postcode'].strip()
        postcode= line['postcode'].strip().upper().replace(' ','')
    if line['telephone_no'].strip()
        telephone_no = line['telephone_no'].strip()

и это:

item = " 4 -2,5456+263 @5"
item = ''.join([char for char in item if char.isdigit()])

item = "+34 0394-234553"
item = item.replace('+','').replace(' ','').replace('-','')

Какие-либо советы / предложения по улучшению / альтернативам? :)

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

Вы можете сделать список непустых строк однострочным

lines = filter(None, (line.strip() for line in open('data.txt', 'rb').readlines()))

Самый быстрый способ удалить все, кроме определенных символов

Использование __contains__ метод строковой константы с filter (filter возвращает строку, если используется со строкой).Таким образом, вы можете удалить нецифровые символы следующим образом:

import string
filter(string.digits.__contains__, " 4 -2,5456+263 @5")
1 голос
/ 21 апреля 2011
with open('data.txt', 'rb') as myfile:
    for line in myfile:
        if not line:
            continue

Поскольку вы, вероятно, хотите что-то сделать со строкой, ее можно еще упростить:

with open('data.txt', 'rb') as myfile:
    for line in myfile:
        if line:
           do_whateveryouwant(line)
...