Python以DOT格式读取文件并返回城市名称列表 [英] Python read file in DOT format and return city name list
问题描述
大家好,问题是这样的,说实话,这是家庭作业,但我只是被卡住了而已. 我的问题是,由于城市在每行中的索引位置不同,我们如何才能逐行进行迭代并将城市名称返回到列表中?(可以帮助我入门的任何帮助我都不会偷懒,确实已经为此工作了几个小时)
hey everyone the question is like this, this is homework question to be honest but I am just stuck and its been forever. My question is, since the city has different index positions in each line how can we iterate line by line and return city names into a list? (any help that can get me started will be appreciated I am not being lazy I really did work on this for couple hours already)
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文件(其中的一部分)
and below is the DOT file(part of it)
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
推荐答案
在一般情况下,这确实非常困难.但是我们可以看看他们是否使我们更容易了.我们可以排成一行阅读并查看它:
In the general case, this would be really, really hard. But we can see if they've made it any easier for us. We can read in a line and look at it:
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()
方法将它们分成几列:
See all those \t
symbols? We're in luck -- the columns are separated by tabs! So one way is to use the .split()
method on the lines to break them into columns:
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")
模式可以遍历所有行,其余的应该可以组合在一起.
pattern to iterate over the lines, and the rest you should be able to piece together.
[此外:我实际上将csv.reader
与delimiter="\t"
一起使用,但这可能超出了老师的要求.]
[Aside: I'd actually use a csv.reader
with delimiter="\t"
, but that's probably a little beyond what the teacher is after.]
这篇关于Python以DOT格式读取文件并返回城市名称列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!