2013-11-21 2 views
0

Я пытаюсь разобрать файл в следующем форматепитон разборе входных данных, что делает сумму входного

1999 
I 
Willem Jan van Steen   9859 77 
Guillaume Kielmann   5264 77 
Guillaume Bos    8200 6 

(файл гораздо длиннее, и разделённый учебного год (в 1999 году) и разным (как «I»). Единственное, с чем мне нужно работать, - это последнее число (например, 77, 77, 6). Это число - это процент. Конечная цель - сделать BarChart, состоящий из 10 баров, гистограмм состоят из разницы (суммы) раз, когда процент от файла попадает в диапазон диаграммы (например, гистограмма от 70 до 80% ->, тогда, если вышеуказанный вход - это весь файл, сумма будет равна 2, и barchart будет иметь высоту 2. Но моя первая проблема заключается в том, что я не знаю, как разбирать входные данные. Я был thi что python должен читать строки, а затем из индекса (так что сделать диапазон), на котором процентное число начинает «делать что-то» с цифрами (-> смотреть, в какой диапазон гистограммы они падают, а затем сделать цикл на сумму того, сколько раз процент попадает в эту диаграмму.)

Надеюсь, кто-то может мне помочь!

+0

Добро пожаловать на переполнение стека! Похоже, вы хотите, чтобы мы написали вам код. Хотя многие пользователи готовы создавать код для кодера, терпящего бедствие, обычно помогают, когда плакат уже попытался решить проблему самостоятельно. Хорошим способом продемонстрировать это усилие является включение кода, который вы написали, пример ввода (если таковой имеется), ожидаемый вывод и вывод, который вы фактически получаете (вывод консоли, трассировки стека, ошибки компилятора - независимо от того, что применимо). Чем больше деталей вы предоставляете, тем больше ответов вы получите. Проверьте [FAQ] и [ask] –

ответ

0

Используйте str.rsplit(), чтобы разбить строку на слова, считая справа. Если вы перейдете в None, он разделится на произвольные пробелы, предоставив вам аккуратные разделенные строки и счетчик, позволяя сохранить пробелы в первом столбце.

Короткие демо, что это означает:

>>> 'Willem Jan van Steen   9859 77\n'.rsplit(None, 2) 
['Willem Jan van Steen', '9859', '77'] 

Здесь пространства во имя сохраняются, но эти два числа в конце теперь отдельные элементы в списке. Новая линия в конце ушла.

Если петля над открытым файловым объектом, вы получите отдельные строки, давая вам метод для разбора файла построчно:

with open(inputfilename) as inputfh: 
    for line in inputfh: 
     columns = line.rsplit(None, 2) 
     if len(columns) < 3: 
      continue # not a line with name and numbers 
     percentage = int(columns[2]) 
     if 70 <= percentage <= 80: 
      # we have a line that falls within your criteria 
Смежные вопросы