Python читает файл в формате DOT и возвращает список имен городов

эй, каждый вопрос такой, это вопрос домашней работы, если честно, но я просто застрял, и это было навсегда. Мой вопрос заключается в том, что город имеет разные позиции индекса в каждой строке, как мы можем перебирать строки за строкой и возвращать названия городов в список? (любая помощь, которая может меня начать, будет оценена, я не ленив, я действительно работал над этим уже пару часов)

citylist(filename) reads a file in the DOT format and returns a list of city names, one for each line in the file. The DOT format may have trailing spaces on the city name; make sure citylist creates a list of city names with trailing spaces removed (easy using Python's strip() method). Two test cases are shown below, for lines at index 3 and 347. citylist("DOT500.txt")[3] 'TUCSON' citylist("DOT500.txt")[347] 'NORTH VILLE' 

и ниже – файл DOT (его часть)

 1 958164 TOYOTA MOTOR CORPORATION TOYOTA LAND CRUISER 1994 19941223 N 0 0 SERVICE BRAKES, HYDRAULIC:ANTILOCK ARNOLD CA JT3DJ81W8R0 19950103 19950103 ABS SYSTEM FAILURE, AT 20MPH. TT EVOQ V 2 958156 TOYOTA MOTOR CORPORATION TOYOTA PASEO 1994 Y 19941226 N 0 0 PARKING BRAKE:CONVENTIONAL SAN JOSE CA JT2EL45U5R0 19950103 19950103 1 PARKED ON FLAT SURFACE EMERGENCY BRAKING ENGAGED VEHICLE ROLLED REARWARD. TT EVOQ V 3 958124 TOYOTA MOTOR CORPORATION TOYOTA COROLLA 1994 Y 19941128 N 0 0 AIR BAGS:FRONTAL PHOENIX AZ 19950103 19950103 UPON FRONTAL COLLISION, AIR BAG FAILED TO DEPLOY. VEHICLE CLASSIFIED AS TOTALED. PLEASE DESCRIBE DETAILS. TT EVOQ V 4 958122 NISSAN NORTH AMERICA, INC. NISSAN MAXIMA 1994 19950103 N 0 0 SUSPENSION TUCSON AZ JN1HJ01F4RT 19950103 19950103 THE STRUT WAS BAD THERE IS A NOISE ON THE PASSENGER SIDE DOOR AND THE ENGINE LIGHT MALFUNCTION. TT EVOQ V 5 958122 NISSAN NORTH AMERICA, INC. NISSAN MAXIMA 1994 19950103 N 0 0 ENGINE AND ENGINE COOLING:ENGINE TUCSON AZ JN1HJ01F4RT 19950103 19950103 THE STRUT WAS BAD THERE IS A NOISE ON THE PASSENGER SIDE DOOR AND THE ENGINE LIGHT MALFUNCTION. TT EVOQ V 6 958247 NISSAN NORTH AMERICA, INC. NISSAN PATHFINDER 1994 N 0 0 SUSPENSION:FRONT ABINGDON MD 19950103 19950103 FRONT TIRES SHOW EXCESSIVE WEAR AND STEEL BELTS. NISSAN IS OFFERING TO REPLACE TWO TIRES. TT EVOQ V 7 958143 FORD MOTOR COMPANY FORD MUSTANG 1991 19941119 Y 0 0 SEATS:FRONT ASSEMBLY:POWER ADJUST PENSICOLA FL 19950103 19950103 DRIVER SIDE POWER SEAT CAUGHT FIRE. TT EVOQ V 8 958141 DAIMLERCHRYSLER CORPORATION CHRYSLER NEW YORKER 1989 19950103 N 0 0 POWER TRAIN:AUTOMATIC TRANSMISSION LEVITTOWN NY 1C3BC4639KD 19950103 19950103 2 TRANSMISSION NOT SHIFTING OUT OF 2ND GEAR, WENT INTO LIM MODE/TRANSMMION NOT SHIFTING THEN JUMPED OUT OF GEAR. *AK EVOQ V 9 958128 DAIMLERCHRYSLER CORPORATION DODGE SHADOW 1990 Y 19941224 N 0 0 SERVICE BRAKES, HYDRAULIC:ANTILOCK WILMINGTON DE 1B3XT44KXLN 19950103 19950103 1 ABS: EXPERIENCED ANTI-LOCK BRAKE FAILURE/EXTENDED STOPPING DISTANCE, RESULTING IN AN ACCIDENT, IMPACT 12:00 POSITION SPEED, 20 MPH. TT EVOQ V 10 958128 DAIMLERCHRYSLER CORPORATION DODGE SHADOW 1990 Y 19940412 N 0 0 SUSPENSION:FRONT WILMINGTON DE 1B3XT44KXLN 19950103 19950103 1 MISALIGNMENT, CAUSING VEHICLE TO VEER TO THE CENTER. *AK EVOQ V 11 958128 DAIMLERCHRYSLER CORPORATION DODGE SHADOW 1990 Y 19941117 N 0 0 ENGINE AND ENGINE COOLING:ENGINE WILMINGTON DE 1B3XT44KXLN 19950103 19950103 1 ENGINE MOTOR MOUNTS FAILED, RESULTING IN ENGINE NOISE. *AK EVOQ V 12 958168 GENERAL MOTORS CORP. CHEVROLET SUBURBAN 1995 Y 19950101 N 0 0 POWER TRAIN:AUTOMATIC TRANSMISSION:GEAR POSITION INDICATION (PRNDL) SHAFTFBURG MI 19950103 19950103 VEHICLE ROLLED DOWN HILL WHILE IN PARK, AND INTO A TREE. TT EVOQ V 13 958169 GENERAL MOTORS CORP. GEO METRO 1995 Y 19941225 N 1 0 SERVICE BRAKES, HYDRAULIC:FOUNDATION COMPONENTS NORFOLK VA 19950103 19950103 BRAKES WOULD NOT WORK ON SEVERAL OCCASIONS, LAST INSTANCE RESULTED IN AN ACCIDENT. TT EVOQ 

One Solution collect form web for “Python читает файл в формате DOT и возвращает список имен городов”

В общем случае это было бы действительно, очень сложно. Но мы можем видеть, облегчили ли они нам это. Мы можем прочитать в строке и посмотреть на нее:

 In [31]: first_line = open("toyota.dot").readline() In [32]: print repr(first_line) ' 1\t958164\tTOYOTA MOTOR CORPORATION\tTOYOTA\tLAND CRUISER\t1994\t\t19941223\tN\t0\t0\tSERVICE BRAKES, HYDRAULIC:ANTILOCK\tARNOLD \tCA\tJT3DJ81W8R0\t19950103\t19950103\t\t\tABS SYSTEM FAILURE, AT 20MPH. TT\tEVOQ\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tV\t\n' 

Смотрите все эти символы \t ? Нам повезло – столбцы разделены вкладками! Таким образом, один из способов – использовать метод .split() на линиях, чтобы разбить их на столбцы:

 In [33]: first_line.split("\t") Out[33]: [' 1', '958164', 'TOYOTA MOTOR CORPORATION', 'TOYOTA', 'LAND CRUISER', '1994', [... etc ...] '\n'] 

и мы можем затем извлечь столбцы:

 In [34]: first_line.split("\t")[11] Out[34]: 'SERVICE BRAKES, HYDRAULIC:ANTILOCK' In [35]: first_line.split("\t")[12] Out[35]: 'ARNOLD ' 

и избавиться от пробелов.

 In [36]: first_line.split("\t")[12].strip() Out[36]: 'ARNOLD' 

Вы можете использовать

 with open("toyota.dot") as data: for line in data: parts = line.split("\t") 

шаблон для итерации по линиям, а в остальном вы должны быть в состоянии собрать вместе.

[Кроме того: я действительно использовал csv.reader с delimiter="\t" , но это, вероятно, немного выше, чем учитель.]

  • Добавьте элемент между каждым элементом, уже находящимся в списке
  • У python есть отсортированный список?
  • Как я могу отформатировать список для печати каждого элемента в отдельной строке в python?
  • Проверьте, существует ли значение в списке словарей?
  • Умножение списка Python: ] * 3 делает 3 списка, которые зеркально отражают друг друга при изменении
  • Мутатный кортеж списков, получающих объект «tuple», не поддерживает присвоение элемента »
  • Сгладить список списков
  • Python - странное поведение с dicts в списке
  • Python - лучший язык программирования в мире.