4

次の構造を持つCVSファイルから特別なフィールドをどのように読み取ることができるのか疑問に思っています:

40.0070222,116.2968604,2008-10-28,[["route"], ["sublocality","political"]]
39.9759505,116.3272935,2008-10-29,[["route"], ["establishment"], ["sublocality", "political"]]

私が使っていたcvsファイルを読む方法:

with open('routes/stayedStoppoints', 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',', quotechar='"')

それに関する問題は、私が使用できる最初の 3 つのフィールドは問題ありません。

for row in spamreader:

行[0]、行[1]、行[2] 問題なくアクセスできます。しかし、最後のフィールドでは、 csv.reader(csvfile, delimiter=',', quotechar='"') でサブリストごとに分割されていると思います:

だから私がアクセスしようとしたとき、私に見せてください:

[["route"] 

最後のフィールドを処理するソリューションは誰にでもありますが、完全なリストがあります (確かにリストのリスト)

[["route"], ["sublocality","political"]]

各カテゴリにアクセスできるようにします。

ありがとう

4

3 に答える 3

2

最初の 3 つのコンマだけで分割するために使用line.split(',', 3)します。

import json
with open(filename, 'rb') as csvfile:
    for line in csvfile:
        row = line.split(',', 3)
        row[3] = json.loads(row[3])
        print(row)

収量

['40.0070222', '116.2968604', '2008-10-28', [[u'route'], [u'sublocality', u'political']]]
['39.9759505', '116.3272935', '2008-10-29', [[u'route'], [u'establishment'], [u'sublocality', u'political']]]
于 2013-06-16T18:18:38.850 に答える
2

これは有効な CSV ファイルではありません。モジュールはこれcsvを読み取ることができません。

行構造が常にこのような場合 (2 つの数値、日付、およびネストされたリスト)、次のようにすることができます。

import ast
result = []
with open('routes/stayedStoppoints') as infile:
    for line in infile:
        coord_x, coord_y, datestr, objstr = line.split(",", 3)
        result.append([float(coord_x), float(coord_y),
                      datestr, ast.literal_eval(objstr)])

結果:

>>> result
[[40.0070222, 116.2968604, '2008-10-28', [['route'], ['sublocality', 'political']]],
 [39.9759505, 116.3272935, '2008-10-29', [['route'], ['establishment'], ['sublocality', 'political']]]]
于 2013-06-16T18:19:06.850 に答える