-2

編集したい単一のセルを含む CSV ファイルがあります。

たとえば、ファイル内の ID フィールドを検索し、問題の ID の行を返す、非常に単純な関数を作成できます。

id = 3 #column number of the ID field

csvfile = open(os.path.join(LOCAL_FOLDER, "csvfile.csv"), "rU")
csvFile= csv.reader(csvfile, delimiter=",")

def lookup(ID):
    rowNo = 1
    for row in csvFile:
        if row[id] == ID:
            return rowNo
        else:
            rowNo += 1
    return 0

私がやりたいことは、変数と変数replaceを受け取る対応する関数を書くことです:IDcolumndata

def replace(ID, col, data):
    row = lookup(ID)
    #use a CSV writer to replace the item at row, col with data

これを行う方法がわかりません。ライターの使用方法について見つけることができるすべての例は、.CSV ファイル全体を完全に書き換える方法を示しているだけです。これは私が探しているものではありません。PUTではなくa に相当するものが必要ですPOST

4

1 に答える 1

0

fwiw、inspectorG4dget の提案に従って、次のようにコードを書き直しました。

LOCAL_FOLDER = os.getcwd()
CSV_FILE = "csvfile.csv"

def lookup(ID):
    csvfile = open(os.path.join(LOCAL_FOLDER, CSV_FILE), "rU")
    csvFile= csv.reader(csvfile, delimiter=",")
    rowNo = 1
    for row in csvFile:
        if row[id] == ID:
            csvfile.close()
            return rowNo
        else:
            rowNo += 1
    csvfile.close()
    return 0

def replace(ID, col, data):
    index = 1
    row = lookup(ID)
    if row == 0:
        return 0
    csvwritefile = open(os.path.join(LOCAL_FOLDER, "temp.csv"), "w")
    csvWriteFile = csv.writer(csvwritefile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) #obviously change this if you want a diff quoting format
    csvreadfile = open(os.path.join(LOCAL_FOLDER, CSV_FILE), "rU")
    csvReadFile= csv.reader(csvreadfile, delimiter=",")
    for readrow in csvReadFile:
        if index == row:
            temp = readrow
            temp[col] = data
            csvWriteFile.writerow(temp)
            index += 1
        else:
            index += 1
            csvWriteFile.writerow(readrow)

    csvwritefile.close()
    csvreadfile.close()
    os.rename(os.path.join(LOCAL_FOLDER, "temp.csv"), os.path.join(LOCAL_FOLDER, CSV_FILE))

    return 1
于 2013-10-26T08:13:11.667 に答える