Python - содержимое файла во вложенный список - PullRequest
3 голосов
/ 09 марта 2010

У меня есть файл в формате с разделителями табуляции с завершающими символами новой строки, например,

123   abc
456   def
789   ghi

Я хочу написать функцию для преобразования содержимого файла во вложенный список. На сегодняшний день я пробовал:

def ls_platform_ann():
    keyword = []
    for line in open( "file", "r" ).readlines():
        for value in line.split():
            keyword.append(value)

и

def nested_list_input():
    nested_list = []
    for line in open("file", "r").readlines():
        for entry in line.strip().split():
            nested_list.append(entry)
            print nested_list

.

Первый создает вложенный список, но содержит символы \ n и \ t. Последний создает не вложенный список, а множество эквивалентных списков без символов \ n и \ t.

Кто-нибудь поможет?

С уважением, S; -)

Ответы [ 3 ]

8 голосов
/ 09 марта 2010

Требуется модуль csv.

import csv

source = "123\tabc\n456\tdef\n789\tghi"
lines = source.split("\n")

reader = csv.reader(lines, delimiter='\t')

print [word for word in [row for row in reader]]

Выход:

[['123', 'abc'], ['456', 'def'], ['789', 'ghi']]

В приведенном выше коде я поместил содержимое файла прямо для удобства тестирования. Если вы читаете из файла с диска, вы также можете сделать это (что может считаться более чистым):

import csv

reader = csv.reader(open("source.csv"), delimiter='\t')

print [word for word in [row for row in reader]]
3 голосов
/ 10 марта 2010

Другой вариант, который не включает модуль csv :

data = [[item.strip() for item in line.rstrip('\r\n').split('\t')] for line in open('input.txt')]

Как многострочный оператор, он будет выглядеть так:

data = []
for line in open('input.txt'):
    items = line.rstrip('\r\n').split('\t')   # strip new-line characters and split on column delimiter
    items = [item.strip() for item in items]  # strip extra whitespace off data items
    data.append(items)
3 голосов
/ 09 марта 2010

Прежде всего, посмотрите на модуль csv , он должен обрабатывать пробелы для вас. Вы также можете позвонить strip() на значение / запись.

...