Python - 在阅读时忽略每一行的第一个字符(制表符)

时间:2011-04-29 21:54:48

标签: python file-io strip

这是我以前的问题的延续(如果你好奇,请检查它们) 我已经可以看到隧道尽头的灯光,但我有一个最后的问题。

出于某种原因,每一行都以一个TAB字符开头 如何忽略第一个字符(在我的情况下为“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和其他方法,所有这些方法都会占用 all 字符,因此元组的填充会失败。

4 个答案:

答案 0 :(得分:5)

可以line = line[1:]来剥离第一个字符。但是如果你这样做,你应该添加一个断言,第一个字符确实是一个标签,以避免在没有前导标签的情况下修改数据。

还有一个更容易的替代方案,它也可以处理其他几个案例,并且如果要删除的东西不存在则不会破坏。您可以使用line = line.strip()删除所有前导和尾随空格。或者,使用.lstrip()仅去除前导空格,并将'\t'作为参数添加到任一方法调用中,如果要将其他空格留在原位并只删除制表符。

答案 1 :(得分:2)

从字符串中删除第一个字符:

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

答案 2 :(得分:1)

来自文档:

  

str.lstrip([字符])

     

返回删除了前导字符的字符串副本。字符   参数是一个指定的字符串   要删除的字符集。如果   省略或无,chars参数   默认删除空格。该   chars参数不是前缀;   相反,它的价值的所有组合   被剥夺

如果您只想删除行首的标签,请使用

str.lstrip("\t")

这样做的好处是您无需检查以确保第一个字符实际上是一个选项卡。但是,如果存在多个标签的情况,并且您希望保留第二个标签,则必须使用str[1:]

答案 3 :(得分: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!