Python: как изменить строку или список элементов - PullRequest
0 голосов
/ 15 ноября 2011

Я читал из файла, и мне трудно избавиться от "\ t", я пытался использовать i.strip().split("\t")[1] и добавить его в список.но если в строке больше вкладок, то это не очень полезно, например: если я делаю то, что описал, я получаю

z=['\t\t\t\twoman-in-lingerie', 'newspaper-photo', 'reference-to-marie-antoinette', '\tempty-grave', '\t\t\tbased-on-play', '\t\t\tcanadian-humor', '\t\t\tsitcom', 'hypocrisy', 'stripper']

, теперь я не знаю, как удалить эти вкладки, я пытался получить через списоки изменить каждый элемент по отдельности, это было неудачно

Ответы [ 5 ]

2 голосов
/ 15 ноября 2011

Если вы просто пытаетесь удалить вкладки, вы можете использовать следующее понимание списка:

l2 = [item.strip('\t') for item in l1]

Это избавит от любых вкладок в начале или в конце каждого элемента.

2 голосов
/ 15 ноября 2011

Если вам не нужны какие-либо вкладки, вы можете использовать filter после прочтения всего:

for item in my_list:
  item = item.filter(lambda x: x != '\t', item)
0 голосов
/ 15 ноября 2011
z = '''\t\t\t\twoman-in-lingerie
newspaper-photo\t\t\t\t          reference-to-marie-antoinette
\tempty-grave
\t\t\tbased-on-play
\t\t\tcanadian-humor\t\t\t
\t\t\tsitcom
hypocrisy\t\t\t\t\tstripper'''


import re

def displ(x):
    return '\n'.join(map(repr,x.splitlines(True)))


print displ(z)

print '-------------------------------'
zt = re.sub('\t+',' ',z)
print displ(zt)

print '-------------------------------'
zt = re.sub('(^\t+)|(\t+)',
            lambda mat: '' if mat.group(1) else ' ',
            z,
            flags = re.MULTILINE)
print displ(zt)

print '-------------------------------'
zt = re.sub('(^[ \t]+)|([ \t]+)',
            lambda mat: '' if mat.group(1) else ' ',
            z,
            flags = re.MULTILINE)
print displ(zt)

результат

'\t\t\t\twoman-in-lingerie\n'
'newspaper-photo\t\t\t\t          reference-to-marie-antoinette\n'
'\tempty-grave\n'
'\t\t\tbased-on-play\n'
'\t\t\tcanadian-humor\t\t\t\n'
'\t\t\tsitcom\n'
'hypocrisy\t\t\t\t\tstripper'
-------------------------------
' woman-in-lingerie\n'
'newspaper-photo           reference-to-marie-antoinette\n'
' empty-grave\n'
' based-on-play\n'
' canadian-humor \n'
' sitcom\n'
'hypocrisy stripper'
-------------------------------
'woman-in-lingerie\n'
'newspaper-photo           reference-to-marie-antoinette\n'
'empty-grave\n'
'based-on-play\n'
'canadian-humor \n'
'sitcom\n'
'hypocrisy stripper'
-------------------------------
'woman-in-lingerie\n'
'newspaper-photo reference-to-marie-antoinette\n'
'empty-grave\n'
'based-on-play\n'
'canadian-humor \n'
'sitcom\n'
'hypocrisy stripper'

Я использую функцию displ () для отображения с отображением экранированных символов

0 голосов
/ 15 ноября 2011

Это может дать вам представление:

>>> import re
>>> re.sub('\t+','\t', 'hello\t\t\t')
'hello\t'
>>> 
0 голосов
/ 15 ноября 2011

Лучшее, что вы можете сделать, это использовать функцию replace, заменяя табуляции ('\ t') на пустые строки (''):

>>> z = ['\t\t\t\twoman-in-lingerie', '\t\t\tsitcom']
>>> map(lambda x: x.replace('\t',''), z)
['woman-in-lingerie', 'sitcom']
...