Это продолжение моих прежних вопросов (проверьте их, если вам интересно).
Я уже вижу свет в конце туннеля, но у меня последняя проблема.
По какой-то причине каждая строка начинается с символа 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 и другие методы, все они будут есть все символы, поэтому заполнение кортежа не получится.
Вы можете сделать line = line[1:]
, чтобы просто удалить первый символ. Но если вы это сделаете, вы должны добавить утверждение, что первый символ действительно является вкладкой, чтобы избежать манипулирования данными без ведущей вкладки.
Существует более простая альтернатива, которая также обрабатывает несколько других случаев и не нарушает вещи, если вещи, которые нужно удалить, не существуют. Вы можете разделить все ведущие и конечные пробелы с помощью line = line.strip()
. В качестве альтернативы используйте .lstrip()
для разделения только ведущего пробела и добавьте '\t'
в качестве аргумента для вызова метода, если вы хотите оставить другие пробелы на месте и просто удалить вкладки.
Чтобы удалить первый символ из строки:
>>> s = "Hello"
>>> s
'Hello'
>>> s[1:]
'ello'
Из документов:
str.lstrip([символы])
Возвращает копию строки с удаленными ведущими символами. Шрифты Аргумент - это строка, указывающая набор символов для удаления. Если опущен или нет, аргумент символов по умолчанию удаляет пробелы. аргумент chars не является префиксом; скорее, все комбинации его значений лишены
Если вы хотите удалить только вкладку в начале строки, используйте
str.lstrip("\t")
Это имеет то преимущество, которое вам не нужно проверять, чтобы убедиться, что первый символ, по сути, является вкладкой. Однако, если есть случаи, когда есть несколько вкладок, и вы хотите сохранить вторую вкладку и дальше, вам придется использовать str[1:]
.
Рассмотрим это. Вам не нужно передавать "файл" в 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!