2

簡単な質問: リストを CSV ファイルに保存できますか? もしそうなら、どうすればそれを取り戻すことができますか?

これは、私がファイルに書き込んだファイルの内容です。今、それを取得するのに非常に苦労しています。

40;['5', '0'];['15', '0'] ; ['25', '0'] ; ['30', '0'] ; ['40', '0'] ; ['50', '0'].....   
50; ['0', '0'] ; ['10', '0'] ; ['15', '0'] ; ['25', '0'] ; ['30', '0'] ; ['40', '0'].....
60; ['0', '0'] ; ['10', '0'] ; ['15', '0'] ; ['20', '0'] ; ['25', '0'] ; ['30', '0'].....
70; ['0', '0'] ; ['5', '0'] ; ['10', '0'] ; ['15', '0'] ; ['20', '0'] ; ['30', '0'].....

そして、これは私が試して取得しようとしたコードです:

import csv
reader = csv.reader(open("NewTableInfo", "r"), delimiter=';')
for row in reader:
    print (row)

これにより、括弧内の値が文字列型であるリストが得られます。それらをリストにしたい(別のファイルでは、各行を辞書項目にします)。

['40', "['5', '0']", "['15', '0'] ", " ['25', '0'] ", " ['30', '0'] "......

何か案は?上記の方法で CSV ファイルを書き込んで使用可能にすることはできますか?

4

3 に答える 3

3

あなたが言ったことをすることは可能です:

import csv
import ast

with open("NewTableInfo", "r") as f:
    reader = csv.reader(f, delimiter=';')
    for row in reader:
        print [ast.literal_eval(x.strip()) for x in row]

ただしpickle、代わりに使用することをお勧めします。これはデータを保存する良い方法ではありません。

于 2012-09-29T06:13:38.647 に答える
2

一般に、CSV はリストをうまく処理できません。データを取得することは可能ですが、リストの文字列表現を自分で解析する必要があります。別の方法として、JSON などのリスト データをサポートする形式を使用することもできます。

CSV からリストを取得する手っ取り早いが安全evalでない方法は、取得した文字列に対して を使用することです。string がある場合"['5', '0']"、それを評価するとリストが返されます。

>>> eval("['5', '0']")
['5', '0']

ただし、前述したように、これは安全ではないため、自分で作成した CSV ファイルを扱う場合にのみ使用してください。番号のリストなどしか含まれていないことがわかります。制御していない文字列を評価しないでください。人々は悪意のある文字列を作成し、評価されると、ハード ドライブ上のファイルを削除したり、その他の悪事を行ったりする可能性があります。

セキュリティ上の理由で eval を使用できない場合は、リスト形式を自分で解析する必要があります。これはかなり面倒な作業になる可能性があります。これを行う必要がある場合は、JSON など、データに別の形式を選択した方がよい場合があります。

于 2012-09-29T06:08:12.923 に答える
0

json を使用することもできます。csvの理由はありますか?

import json

# write
out = open("datafile.json", "w")
data = [['5', '0'],['15', '0'] ,['25', '0'] ,['30', '0'] ,['40', '0'], ['50', '0']]
json_out_data = json.dumps(data)
out.write(json_out_data)
out.close()

input = open("datafile.json", "r")
data = json.loads(input.read())
于 2012-09-29T08:37:50.613 に答える