1

次のフィールドを含むスプレッドシートがあります。

id age smoker do sport
1   35  yes    rare
2   40  no     frequently
3   20  no     never 
4   ..  ..     ..

このスプレッドシートをcsvファイル変換して編集するPythonスクリプトを作成したいと思います。

「はい」は 1 になり、「いいえ」は 0 になり、「ほとんどない」は 0 になり、「頻繁に」は 1 になり、「まったくない」は 2 になります。

区切り文字を「;」として使用して、スプレッドシートを csv ファイルとして保存しました。および quotechar ' " '.

今、私はこのコードを書きました:

import csv
filecsv=open("file.csv","r")
reader=csv.reader(filecsv, delimiter= ';' , quotechar=' " ')
out=open("outfile.csv","w")
output=csv.writer(out, delimiter= ';' , quotechar=' " ')

for row in reader:
    for field in row:
        if row[field]=='yes':
                .
                .
                .
                .

でも続きがわからない…。

Python を使用してこれらの変更を行う方法を誰か教えてもらえますか?

Python のリストと辞書のどちらを使用する方がよいですか?

みんなありがとう!

4

3 に答える 3

2

CSV ファイルはスプレッド シートのように見えますが、本質的には単なるテキスト ファイルです。つまり、csv ライブラリを実際に使用する必要はなく、単純な文字列として読み取る必要があります。

ファイルを文字列として取得したら、正規表現を使用して関連する値を変換できます。次に例を示します。

import re
o = open("output","w")
data = open("file").read()
o.write( re.sub("someword","newword",data) )
o.close()

re.sub()変換する値ごとに1 つの呼び出しが必要になることに注意してください。

于 2012-11-13T14:26:08.213 に答える
1

Python のcsv ライブラリについて既に知っている方法を見ると、入力 csv の各行に対して、必要な変更を加えて新しい行を作成し、それを新しい csv ファイルに書き出すのは簡単です。

csv リーダーが各行をリストとして扱う方法に注意してください。次に、csv ライターのwriterow()メソッドを見てください。Python リストを受け取り、それを csv 行として書き込みます。一度に 1 行ずつ読み取り、必要な変更を加えてライターに出力するだけです。あなたのコードを使用して:

for row in reader: #for each row in the input
    outrow = list(row) # make a copy of the row. I'm not sure if you NEED to do this, but it doesn't hurt.

    if outrow[2] == "yes": #if the value in the 3rd column, "smoker", is "yes"
        outrow[2] = 1 #change it to 1
    elif outrow[2] == "no": #if it's "no"
        outrow[2] = 0 #change it to 0.

    #repeat this process for outrow[3] (meaning column #4, "do sport")

    output.writerow(outrow)

おそらく、python が 3 番目の列を 2、4 番目の列を 3 と呼んでいることにお気づきでしょう。これは、python が 0 からカウントを開始するためです (つまり、1 番目の列は列 0 です)。この例に従って、必要なすべての変更を行うことができるはずです。

終了したら、ファイルを閉じることを忘れないでください。

于 2012-11-13T14:27:05.340 に答える
0

常にその形式があり、行ごとに置き換えたい場合:

replacements_dict = {
  'yes': 1,
  'no' : 0,
  'rare': 0,
  'frequently': 1,
  'never': 2
}

for row_list in reader:
   output.writerow([
     row_list[0], 
     row_list[1]
     replacements_dict[row_list[2]],
     replacements_dict[row_list[3]]
    ])

csv を文字列としてメモリに読み込んで、georgesl が提案するような単語を置き換えることもできます

于 2012-11-13T14:25:01.180 に答える