0

いくつかの単語の後に数字が続く CSV ファイルがあり、数字を追加する方法が必要です。1 を追加するか、1 に戻すかのいずれかです。たとえば、次の単語があるとします。

variant,1
sixty,2
game,3
library,1

ユーザーが数字の 60 を入力した場合、それを使用して数字に 1 を追加するにはどうすればよいでしょうか?また、それを 1 にリセットするにはどうすればよいでしょうか?

私は答えを見つけようとしてGoogle+Stackoverflowのいたるところにいましたが、答えを見つけることができなかったのは、何よりも私の経験不足によるものだと思います。ありがとう。

4

3 に答える 3

0

数値を 1 に切り替えたいときと 1 を追加したいときがわからないと、完全な答えを出すことはできませんが、正しい軌道に乗せることはできます。最初にcsvファイルをインポートしたいので、それを変更できます。csv モジュールはこれに非常に役立ちます。ここでそれについて読んでください:http://docs.python.org/2/library/csv.html

これを辞書構造に読み込むと、各単語が対応する番号にリンクされるためです。このようなものは、csvファイルの列から辞書を作成します

次に、raw_input (または Python 3.0 を使用している場合は input) を使用して、探している単語を取得し、それをキーとして使用して、変更する数値を見つけて変更します。http://anh.cs.luc.edu/python/hands-on/handsonHtml/handson.html#x1-490001.12 またはhttp://www.sthurlow.com/python/lesson06/ は、1 つのパーツを取得する方法を示します。辞書の他の部分と、情報を辞書に保存する方法を説明します。

直接の回答でなくてすみません。他の誰かが書いてくれるかもしれませんが、それはあなたが始めるきっかけになるはずです。

于 2013-04-15T00:12:44.740 に答える
0

これはおそらく最善の方法ではありませんが、loadtxt()の助けを借りて numpy を使用して配列オブジェクトに csv ファイルをロードできます。次のコードは、最初の列に名前があり、2 番目の列に数字がある 2 次元配列を提供します。

import numpy as np    
a = np.loadtxt('YourFile',delimiter=',')

必要な方法で数値に変更を加え、numpy savetxt()を使用してファイルを保存します。ファイルが非常に重い場合、巨大な配列をロードすると多くのメモリが必要になるため、このソリューションは面倒です。したがって、これは単なる回避策と考えてください。辞書ソリューションは実際には優れています(私は思います)。

于 2013-04-15T00:48:57.067 に答える
0

これは、fileinput を使用した簡単なまとめです。値を減らしたりリセットしたりする条件がわからないので、自由に渡すことができるキーワード引数として追加しました。そのような

updateFileName(filename, "sixty", reset=True)
updateFileName(filename, "sixty", decrease=True)
updateFileName(filename, "sixty")

それぞれの結果は一目瞭然です。幸運を!あなたの構造がどのようになっているかわからなかったので、私はそれを Try でラップしました。スペースがある場合は、キーと値を .strip() する必要があります。

import fileinput
def updateFileName(filename, input_value, decrease=False, reset=False):
    try:
        for line in fileinput.input(filename, inplace=True):
            key, value = line.split(",")
            if key == input_value:
                if decrease:
                    sys.stdout.write("%s,%s"(key, int(value) - 1)
                elif reset:
                    sys.stdout.write("%s,%s"(key, 1)
                else:
                    sys.stdout.write("%s,%s"(key, int(value) + 1)
                continue
            sys.stdout.write(line)

    finally:
        fileinput.close()
于 2013-04-15T02:18:03.440 に答える