2013-09-06 3 views
3

Я получил следующий код:Python чтение файла печати несколько информации

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sys 

#read information 
f = open ("/home/ibrahim/Desktop/Test.list") 
text = f.read() 

#show existing companys 
Companyname = text.split("\n") 
print Companyname 

#User chooses a company he wants to know more about 
raw_input('\n<Wählen Sie die Firma Ihrer Wahl aus um die Informationen anzuzeigen.>\n\n<Geben Sie die Firmenspezifische Zahl ein und b$ 

#Companyspecific information is getting revealed 

Test.list выглядит как этот

(1)Chef,1965,10 
(2)Fisher,1932,20 
(3)Gardener,1998,5 

Моя цель в том, что пользователь этой программы может выберите конкретную компанию, о которой он хочет узнать больше. Например, в году эта компания начала и количество сотрудников
Пример:COMPANYNAME = Chef, года компания начала = 1965 и числа сотрудников = 10 Я не хочу, чтобы напечатать более чем название компании, поскольку информация в будущем будет содержать больше, чем только год основания и количество сотрудников.

Редактировать: Отстой, что я не могу принять каждый ответ и не могу проголосовать за кого-либо, потому что я действительно хочу: SI ценят каждую помощь, которую я получил от вас и парня, который редактировал мой пост, так что он выглядел немного лучше ^^

+0

Пожалуйста, правильно отформатируйте код для лучшей читаемости. см. [как форматировать блоки кода] (http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks) –

+1

да Прошу прощения:/Я тоже был смущен когда я увидел это ^^ Я очень благодарю вас за поток «как отформатировать блоки кода» :) –

+0

Я бы рекомендовал использовать 'splitlines()' вместо 'split ('\ n')', поскольку он является более читаемым и более надежными для систем Windows, которые также используют символ '\ r' (возврат каретки) с символом' \ n' (символ прерывания строки). Почти всегда лучше использовать стандартный библиотечный код, а не переписывать его самостоятельно :-) – immortal

ответ

2

Вот рабочий пример:

#!/usr/bin/env python 

for line in open('data.txt'): 
    company, year, number_of_employee = line.split(',') 
    print "Company: %s" % company 

Привет,

+0

черт возьми, это тоже очень хорошо: D Я ценю вашу помощь чувак !!! –

1

вы можете сделать:

info = text.split("\n") 
CompanyName = [inf.split(')')[1].split(',')[0] for inf in info] 
+0

hm:/it показывает мне эту ошибку Traceback (последний последний звонок): Файл "/home/ibrahim/Desktop/Testtesten.py" , строка 15, в CompanyName = info.split (')') [1].split (',') [0] AttributeError: объект 'list' не имеет атрибута 'split' –

+0

Вероятно, должно быть, 'CompanyName = [i.split ... для i in info]' –

+0

да конечно ... tobias исправил его правильно – cjdcordeiro

1

Как об использовании регулярных выражений, чтобы найти несколько частей?

import re 
with open("Test.list") as f: 
    for line in f.readlines(): 
     m = re.match(r'\((\d)+\)([^,]+),(\d+),(\d+)', line) 
     print m.groups() 

Первая группа является идентификатором (\d)+, то второе имя ([^,]+) (все, кроме запятой), третья (\d+) год и четвертое число сотрудников (\d+).

Конечно, если у вас есть имя компании вместе с ID, вы можете просто использовать line.split(',') или csv.

+0

это работает отлично !!! спасибо :) Я пытаюсь понять, что вы написали сейчас, и я ценю это, что вы тоже это объясняете! спасибо –

0

Вы сделаете это с помощью считывателя csv. http://docs.python.org/2/library/csv.html

>>> import csv 
>>> list={} 
>>> with open('/home/ibrahim/Desktop/Test.list', 'rb') as csvfile: 
...  spamreader = csv.reader(csvfile, delimiter=',') 
...  for name,year,number in spamreader: 
...   id,name = name.split(')',1) 
...   list[name] = {'year':year,'number':number,'name':name} 
>>> name = raw_input('Enter company name') 
>>> print '{name} started at {year} and has {number} workers'.format(**list[name]) 
1

Вот Другой пример, более эффективным.

#!/usr/bin/env python 
# virtualenv ~/.virtualens/company_reader 
# source ~/.virtualenvs/company_reader/bin/activate 
# pip install prettytable 
# python reader.py 
import re 
from collections import namedtuple 

# PrettyTable is a tool to format a list of elements with an elegant table. 
import prettytable 

Company = namedtuple('Company', ['identifier', 'name', 'year', 'nbr_employee']) 

company_name = raw_input('Enter the company: ').lower() 

# The regexp 
pattern_str = r"\((?P<identifier>\d+)\)(?P<name>\w+),(?P<year>\d+),(?P<nbr_employee>\d+)" 
pattern = re.compile(pattern_str) 

companies = [] 

# TODO: add a argument parser 
# docopt is a correct solution for this purpose 
for line in open('data.txt'): 
    matching = pattern.match(line) 
    # if there is no matching, continue on the next line 
    if matching is None: 
     continue 
    company = Company(*matching.groups()) 
    if company.name.lower() == company_name: 
     companies.append(company) 

if not companies: 
    print "Sorry, there is no result" 
else: 
    pt = prettytable.PrettyTable(['Identifier', 'Name', 'Year', 'Number of Employee']) 
    pt.align['Identifier'] = 'l' 
    pt.align['Name'] = 'l' 
    pt.align['Number of Employee'] = 'r' 

    for company in companies: 
     pt.add_row([company.identifier, company.name, company.year, company.nbr_employee]) 

    print pt 
+0

Благодарим вас за этот код! Я загрузил «симпатичный», но я уже не знаю, что вводить, когда он говорит «Войдите в компанию:« Я настоящий новичок на Python, и было бы здорово, если бы вы могли сказать мне, что набирать здесь именно ^^ спасибо :) –

+0

«Войти в компанию» просит вас вставить компанию из своего файла. – matrixise

+0

Для кода мы используем сопоставление шаблонов с регулярным выражением, и мы перебираем все строки, чтобы найти правильную линию. Если мы найдем соответствующую строку, добавим ее в список. В конце вашего файла мы покажем результат в виде таблицы. – matrixise

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