读取以3个间距分隔的文本文件数据

时间:2013-10-09 02:23:15

标签: python csv split notepad

您好我想在第180行提取第[3]和[4]栏的信息。我面临的问题是

  1. 元素由3个空格分隔
  2. @@数据从第180行开始
  3. 我使用的代码无法提取特定的列
  4. 它给我的错误:line = reader [180] [3] IndexError:列表索引超出范围

    @@Data: Source 0 in text format:        
    1    2    2    1    1    9    1    1    -2    2    1    -3    3    1 
    3    2    2    1    1    9    1    1    -2    2    1    -3    3    1 
    4    2    2    1    1    9    1    1    -1    1    1    -2    2    1 
    
  5. 我使用的代码

         reader = list(csv.reader(f, delimiter=' '))
         SatIP, CoerIP = getSatHcoer(reader)
         print SatIP, CoerIP
    
         def getSatHcoer(reader): 
         line = reader[180][3]
         Sat = line.split('    ')
         Sat =  Sat[len(Sat)-1]
         line = reader[180][4]
         Coer = line.split('     ')
         Coer =  Coer[len(Coer)-1] 
         return Sat, Coer
         pass
    

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则无法拆分字段,因为它们由 3 空格分隔;你可以实际拆分正则表达式,尝试使用:

 Coer = line.split("\s+")

\s是表示空格的正则表达式类(制表符,空格,换行符和退格键?) +表示应用前一个模式一次或多次,因此该表达式将匹配一个或多个空格字符。使用这种方法,分隔字段的空格数无关紧要。

修改 如下所述,这仅适用于导入re并使用re.split。

 import re
 Coer = re.split("\s+",line)

答案 1 :(得分:0)

请记住,python索引从0开始,我假设当你说第180行时,你的意思是文件中的第181行和第3列和第3列。 4是文件中的第4和第5列。如果不是,那么这些数字为-1。

def getSatHcoer(reader):
    Sat = reader[180][3]
    Coer = reader[180][4]
    return Sat, Coer

with open('file.txt', 'r') as f:
    reader = [[x.strip().split('   ')] for x in f]
SatIP, CoerIP = getSatHcoer(reader)
print SatIP, CoerIP