web-dev-qa-db-ja.com

Python経由でCSVファイルの特定の値を変更する

Csvファイルの列の特定の値を変更する方法が必要です。たとえば、csvファイルがあります。

"Ip","Sites"
"127.0.0.1",10
"127.0.0.2",23
"127.0.0.3",50

「127.0.0.2」の値23から30を変更する必要があります。

私はcsvライブラリを使用しています:csvをインポートします

Pythonが初めてなので、どんな助けでも感謝します。ありがとう!

15
ihorko

これは、csvファイルを開き、メモリ内の値を変更してから、変更をディスクに書き戻すソリューションです。

r = csv.reader(open('/tmp/test.csv')) # Here your csv file
lines = list(r)

行の内容:

[['Ip', 'Sites'],
 ['127.0.0.1', '10'],
 ['127.0.0.2', '23'],
 ['127.0.0.3', '50']]

値の変更:

lines[2][1] = '30'

行の内容:

[['Ip', 'Sites'],
 ['127.0.0.1', '10'],
 ['127.0.0.2', '30'],
 ['127.0.0.3', '50']]

これで、ファイルに書き戻すだけで済みます

writer = csv.writer(open('/tmp/output.csv', 'w'))
writer.writerows(lines)
33
Diego Navarro

既存のファイルの値を実際に置き換えることはできません。代わりに、次のことが必要です。

  1. 既存のファイルを読み込む
  2. メモリ内のファイルを変更する
  3. 新しいファイルを書き出す(既存のファイルを上書きする)

また、既存のファイルを1行ずつ読み込み、新しいファイルに書き出して、値をその場で置き換えます。完了したら、両方のファイルを閉じ、元のファイルを削除して、新しいファイルの名前を変更します。

13
Daren Thomas

パンダと呼ばれる非常に強力なライブラリを使用できます。以下に例を示します。

import pandas as pd
df = pd.read_csv("test.csv")
df.head(3) #prints 3 heading rows

出力:

    Ip  Sites
0   127.0.0.1   10
1   127.0.0.2   23
2   127.0.0.3   50

1行目の[サイト]列の値を変更する場合は、次を実行します。

df.set_value(1, "Sites", 30)

「Ip」が127.0.0.2に等しいすべての値を変更する場合は、次を実行します。

df.loc[df["Ip"]=="127.0.0.2", "Sites"] = 30

最後に、値を保存するには:

df.to_csv("test.csv", index=False)
13
Yury