2015-03-05 3 views
0

В настоящее время я пытаюсь разбить файл .txt в список списков для упрощения сортировки. Однако я не могу заставить свою функцию разделения работать. Текстовый файл будет выглядеть как этотРазбиение текстового файла в список списков

First Name  Second Name  Age  Class Room Number  GPA 
Louis    Darter    16   1      3.5 
Emma    Handzo    15   1      3.6 
Jing    Luo    25   2      2.0 
Charles   Xavier    13   2      3.0 
Scott    Summer    10   1      3.1 

А вот то, что им в настоящее время пытается сделать:

import csv 
reader = csv.reader(open('ARCC_Challenge1.txt', 'rb'), delimiter=' ') 
split_text = [] 
for line in reader: 
    split_text.append(line[1:-1]) 

print split_text 

В идеале, я хотел бы получить выход в формате, который выглядит как [[First Name 1, Last Name 1, Age 1, class room number 1, GPA 1],[First Name 2, Last Name 2, Age 2, class room number 2, GPA 2]...] Код mycurrent создает массив, но у него есть пустые места и многие значения, которые, как представляется, привязаны к \t. Любые идеи, которые вы могли бы дать мне для достижения этой цели?

ответ

2
print map(str.split,open('ARCC_Challenge1.txt', 'rb')) 

Я думаю, что в принципе должны делать то, что вы хотите

вам может понадобиться вызвать list на результат в зависимости от версии питона

в качестве альтернативы, если вы больше списка лиц, ответственных за составление списка

print [line.split() for line in open('ARCC_Challenge1.txt', 'rb')] 

Вы экономите ваши строки вместо их печати

lines = ... 
#then you can skip some with normal slices 
print lines[3:] 
+0

Быстрый вопрос. Если бы я хотел использовать этот подход, пропуская первые несколько строк заголовка, как бы я это сделал? –

+0

@PhilipR .call 'nex (f)' t на объект файла –

+0

или просто использовать sliceing, как я отредактировал мой ответ, чтобы сделать –

4

Я предполагаю, что ваш файл имеет разделитель табуляции, а не пробел? Попробуйте следующее:

import csv 

with open('ARCC_Challenge1.txt', 'rb') as fin: 
    csvin = csv.reader(fin, delimiter='\t') #\t = tab delimited 
    next(csvin, '') # skip header 
    split_text = list(csvin) 
+0

Очевидно, что это оправдано. –

+0

Это близко, но все еще не совсем то, что мне нужно. Мне кажется, что текстовый файл имеет как пробелы, так и вкладки между столбцами. С вашим кодом я получаю выходные данные [[], ['First Name Second Name', '', 'Age', '', 'Class Room Number', '', 'GPA'], ['Louis', ' ',' Dartez ',' ', '16 1 3.5'] ...] –

+0

@PhilipR. если вы можете гарантировать, что ни один столбец не будет более одного слова, - тогда вы можете использовать подход Джорана, который должен работать для ваших данных. –

Смежные вопросы