1

Python の csv モジュールを使用してcities5000.txtgeonames.org ( http://download.geonames.org/export/dump/cities5000.zip )を解析しようとすると、非常に奇妙な動作が発生します:cvsファイル内のすべての行を分割しないでください。

例えば:

>>> len(open('cities5000.txt').read().splitlines())
46955
>>> len(list(csv.reader(open('cities5000.txt'))))
46955
# but here comes some fun
>>>len(list(csv.reader(open('cities5000.txt'), delimiter='\t')))
46048

- は、'\t'このファイルで使用される実際の区切り文字です。したがって、他のレコードのフィールドの一部として認識されたレコードが約 900 あります。しかし、解析されたデータでは、それ以外はすべて問題ありません。

問題は、これの理由は何ですか?また、これらすべてのレコードを手動で分割せずにどのように回避できるでしょうか?

4

2 に答える 2

0

デフォルトの区切り文字は、デフォルトの方言「excel」によって定義されていると思います(https://docs.python.org/2/library/csv.html#csv-fmt-params

区切り文字の種類はわかりませんが、区切り文字を自分で定義すると、データの分割方法をより詳細に制御できると思います。

また、都市名と UTF8 エンコーディングに問題があることも想像できます (詳細な調査のためのヒントとして、確かではありません)。

編集:短いグーグル検索で、これが見つかります: https://github.com/oamasood/GeonamesPy 多分これも役立ちます。

于 2014-09-12T13:05:05.813 に答える