Файл и пространство в Python - PullRequest
0 голосов
/ 30 января 2009

У меня есть файл вроде:

<space>
<space>
line1
<space>
column 1    column 2    column 3   ...

.
.
.


<space>
<space>

Как убрать этот лишний пробел?

Мне нужно извлечь заголовок, который будет на line1. Также мне нужно извлечь column 1, column 2, column 3 и т. Д.

В конце содержимого последнего столбца есть '\ n'. Как от него избавиться ???

Помоги мне с этим ...

Спасибо

Ответы [ 3 ]

4 голосов
/ 30 января 2009

Начните с открытия файла и чтения всех строк:

f = open('filename string');
lines = f.readlines()

Тогда ...

# remove empty lines
lines = [l for l in lines if len(l.strip()) > 0]
header = lines[0]
line = lines[1].split(' ')
column1 = line[0]
column2 = line[1]
...

Также:

total_lines = len(lines)
total_columns = len(line)
1 голос
/ 30 января 2009

Простое решение, используя strip() для удаления пробелов и split() для разделения данных столбца:

>>> mylines
[' \n', ' \n', 'line1\n', ' \n', ' \n', 'column1    column2    column3 \n']
>>> def parser(lines):
...     header=""
...     data=[]
...     for x in lines:
...         line = x.strip()
...         if line == "":
...             continue
...         if header == "":
...             header=line
...         else:
...             data.append(line.split())
...     return {"header":header,"data":data}
... 
>>> parser(mylines)
{'header': 'line1', 'data': [['column1', 'column2', 'column3']]}
>>> 
0 голосов
/ 30 января 2009

Использование функций генератора для обработки каждого элемента синтаксического анализа

def nonEmptyLines( aFile ):
    """Discard empty lines, yield only non-empty lines."""
    for line in aFile:
        if len(line) > 0:
            yield line

def splitFields( aFile ):
    """Split a non-empty line into fields."""
    for line in nonEmptyLines(aFile):
        yield line.split()

def dictReader( aFile ):
    """Turn non-empty lines file with header and data into dictionaries.
    Like the ``csv`` module."""
    iter= iter( splitFields( aFile ) )
    heading= iter.next()
    for line in iter:
        yield dict( zip( heading, line ) )

rdr= dictReader( "myFile", "r" )
for d in rdr:
    print d
...