Python - игнорировать первый символ (вкладку) в каждой строке при чтении - PullRequest
1 голос
/ 30 апреля 2011

Это продолжение моих прежних вопросов (отметьте их, если вам интересно).
Я уже вижу свет в конце туннеля, но у меня есть последняя проблема.

По какой-то причине каждая строка начинается с символа табуляции.
Как я могу игнорировать этот первый символ («табуляция» (\ t) в моем случае)?

filename = "terem.txt"

OraRend = collections.namedtuple('OraRend', 'Nap, OraKezdese, OraBefejezese, Azonosito, Terem, OraNeve, Emelet')


csv.list_dialects()
for line in csv.reader(open(filename, "rb"), delimiter='\t', lineterminator='\t\t', doublequote=False, skipinitialspace=True):
    print line  
    orar = OraRend._make(line) # Here comes the trouble!

Текстовый файл:
http://pastebin.com/UYg4P4J1
(Не могу вставить его сюда со всеми вкладками.)

Я нашел lstrip, strip и другие методы, все они съели бы все символов, поэтому заполнение кортежа завершится неудачей.

Ответы [ 4 ]

5 голосов
/ 30 апреля 2011

Вы можете сделать line = line[1:], чтобы просто удалить первый символ. Но если вы сделаете это, вы должны добавить утверждение, что первый символ действительно является вкладкой, чтобы избежать искажения данных без ведущей вкладки.

Существует более простая альтернатива, которая также обрабатывает несколько других случаев и не ломает вещи, если вещи, которые нужно удалить, отсутствуют. Вы можете убрать все начальные и конечные пробелы с помощью line = line.strip(). В качестве альтернативы, используйте .lstrip() для удаления только начальных пробелов и добавьте '\t' в качестве аргумента для вызова любого метода, если вы хотите оставить другие пробелы на месте и просто удалить вкладки.

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

Чтобы удалить первый символ из строки:

>>> s = "Hello"
>>> s
'Hello'
>>> s[1:]
'ello'
1 голос
/ 30 апреля 2011

Из документов:

str.lstrip ([chars])

Возвращает копию строки с удаленными начальными символами.Аргумент chars - это строка, определяющая набор символов, которые нужно удалить.Если значение опущено или отсутствует, аргумент chars по умолчанию удаляет пробелы.Аргумент chars не является префиксом;скорее, все комбинации его значений отбрасываются

Если вы хотите удалить вкладку только в начале строки, используйте

str.lstrip("\t")

Это дает вам преимуществоНе нужно проверять, чтобы убедиться, что первый символ, по сути, является вкладкой.Однако, если есть случаи, когда имеется более одной вкладки, и вы хотите оставить вторую вкладку включенной, вам придется использовать str[1:].

0 голосов
/ 30 апреля 2011

Учтите это.Вам не нужно передавать «файл» в csv.reader.Файловый объект, представляющий собой последовательность строковых значений, прекрасно работает.

filename = "terem.txt"

OraRend = collections.namedtuple('OraRend', 'Nap, OraKezdese, OraBefejezese, Azonosito, Terem, OraNeve, Emelet')

with open(filename, "rb") as source:
    cleaned = ( line.lstrip() for line in source )
    rdr= csv.reader( cleaned, delimiter='\t', lineterminator='\t\t', doublequote=False, skipinitialspace=True)
    for line in rdr
        print line  
        orar = OraRend._make(line) # Here comes the trouble!
...