2

みなさん、質問はこのようなものです。これは正直に言うと宿題の質問ですが、私は立ち往生していて、永遠に続いています。私の質問は、都市は行ごとに異なるインデックス位置を持っているため、行ごとに反復して都市名をリストに返すにはどうすればよいですか? (私が始めることができる助けがあれば幸いです。私は怠け者ではありません。すでに数時間これに取り組んでいました)

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    
4

1 に答える 1

4

一般的なケースでは、これは非常に困難です。しかし、彼らが私たちにとってそれをより簡単にしてくれたかどうかはわかります. 行を読んでそれを見ることができます:

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シンボルがすべて見えますか?幸運なことに、列はタブで区切られています。したがって、1 つの方法は.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.readerwith を使用しますがdelimiter="\t"、それはおそらく教師が求めているものを少し超えています。]

于 2012-10-28T18:54:20.130 に答える