Разбор файла с данными столбца в Python - PullRequest
0 голосов
/ 27 января 2009

У меня есть файл, который содержит таблицу символов details.Its в виде строк и столбцов.

Мне нужно извлечь первый и последний столбец.

Как я могу это сделать?

Ответы [ 4 ]

13 голосов
/ 27 января 2009

CSV модуль является более простым способом. Вы можете использовать любой разделитель с этим кодом:

import csv

def import_text(filename, separator):
    for line in csv.reader(open(filename), delimiter=separator, 
                           skipinitialspace=True):
        if line:
            yield line

for data in import_text('somefile.txt', '/'):
    print (data)
4 голосов
/ 27 января 2009

Наиболее удобный способ анализа таблиц, записанных в текстовые файлы, - это использование csv module . Он поддерживает любой разделитель и более удобен в использовании, чем ручной построчный анализ. Пример:

import csv

def get_first_and_last_column(filename, separator):
    with file(filename, 'rb') as file_obj:
        for line in csv.reader(file_obj, 
              delimiter=separator,    # Your custom delimiter.
              skipinitialspace=True): # Strips whitespace after delimiter.
            if line: # Make sure there's at least one entry.
                yield line[0], line[-1]

if __name__ == '__main__':
    for pair in get_first_and_last_column(r'c:\temp\file.txt', ';'):
        print pair

Теперь, если вы дадите ему такой файл:

Edgar; Alan; Poe
John; Smith

Lots;   of;   whitespace; here

Будет выдан следующий вывод:

('Edgar', 'Poe')
('John', 'Smith')
('Lots', 'here')

РЕДАКТИРОВАТЬ : пользовательские параметры csv.reader также могут передаваться в качестве аргументов ключевых слов (спасибо, nosklo!).

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

Какой тип разделителя вы используете? То есть что разделяет ваши столбцы?

Полагаю, вы используете запятые, вот так:

col1,  col2,  col3
col11, col12, col13
col21, col22, col23
col31, col32, col33

Следующий код проанализирует его и выведет первый и последний столбцы каждой строки:

# open file to read
f = file('db.txt', 'r')

# iterate over the lines in the file
for line in f:
    # split the line into a list of column values
    columns = line.split(',')
    # clean any whitespace off the items
    columns = [col.strip() for col in columns]

    # ensure the column has at least one value before printing
    if columns:
        print "first", columns[0]  # print the first column
        print "last", columns[-1] # print the last column
0 голосов
/ 20 декабря 2012

Согласно обновлению, столбцы разделены пробелом. Так было бы:

rawfile = open('details.Its', 'r')
table = [line.rstrip().split() for line in rawfile.readlines()]

newtable = [[line[0]]+[line[-1]] for line in table]
print(newtable)
...