Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:替换CSV文件中的一个单元格_Python_Csv - Fatal编程技术网

Python:替换CSV文件中的一个单元格

Python:替换CSV文件中的一个单元格,python,csv,Python,Csv,我有一个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

我有一个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
函数,该函数将接收
ID
变量和
数据
变量:

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

我不知道如何做到这一点,我能找到的所有关于如何使用writer的示例只向您展示了如何完全重写整个.CSV文件,这不是我想要做的;我想要一个等价的
PUT
而不是
POST

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

只有当
ID
data
由相同数量的bytesSo组成时,才能执行此操作。这是否意味着我基本上必须在替换时完全重写CSV文件?是的!如果您担心将整个文件读入内存,则可以写入另一个文件。另一种方法是同时读写(以弥补额外的字节),这是非常不明智的