2
def citypop():
  import csv                                  
  F = open("Top5000Population.txt")           
  csvF = csv.reader(F)
  D = {}
  with csvF for row in csvF:
      city,state,population = row[0],row[1],row[2] 
      population = population.replace(',','') 
      population = int(population)
      city = city.upper()[:12]
      D[(city, state)] = population
  return D

この関数は、をキーとし、その都市 (その州の) の人口を値とcitypop()する dict を返します。(city,state)

構文エラーが発生し続けます.. csv モジュールを正しく理解していませんか?

編集:助けてくれてありがとう....これはうまくいくはずですが、突然エラーが発生します

 for city, state, population in reader(F):       File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/encodings/ascii.py", line 26, in decode         return codecs.ascii_decode(input, self.errors[0]) UnicodeDecodeError: 'ascii' codec can't decode byte 0xa4 in position 7062: ordinal not in range(128)  

テストケースを実行すると....何か提案はありますか?

4

2 に答える 2

3

with ステートメントを使用しようとすると、これを意味すると思います-そのような場合、ファイルはその下にコードを残した直後に閉じられます:

from csv import reader

def citypop():
  D = {}
  with open("Top5000Population.txt") as F:
    for city, state, population in reader(F):
      city = city.upper()[:12]
      D[(city, state)] = int(population.replace(',',''))
  return D

また:

def citypop():
  with open("Top5000Population.txt") as F:
    return dict(((x.upper()[:12], y), int(z.replace(',', '')) for x, y, z in reader(F))
于 2012-11-08T02:17:17.527 に答える
1

withPythonのステートメントを誤解していると思います。6行目を作る:

for row in csvF:

問題を修正する必要があります。

参考までに、ステートメントは基本的に C#withのステートメントと同じです。using作業が完了したらアンロードまたは解放する必要があるリソースのスコープを宣言します。

于 2012-11-08T02:16:28.040 に答える