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

1

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

По какой-то причине каждая строка начинается с символа TAB.
Как я могу игнорировать этот первый символ ( "вкладка" (\ 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 и другие методы, все они будут есть все символы, поэтому заполнение кортежа не получится.

Теги:
file-io
strip

4 ответа

5
Лучший ответ

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

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

  • 0
    Да, для этого есть полоса и полоса. Но мне нужно только удалить самый первый символ (который оказывается \ t).
  • 0
    @Shiki: Тогда перейдите к первому абзацу.
Показать ещё 1 комментарий
2

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

>>> s = "Hello"
>>> s
'Hello'
>>> s[1:]
'ello'
1

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

str.lstrip([символы])

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

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

str.lstrip("\t")

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

0

Рассмотрим это. Вам не нужно передавать "файл" в 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!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню