Python:替换CSV文件中的一个单元格
我有一个CSV文件,其中有一个单元格要编辑 我可以编写一个非常简单的函数,例如,可以在文件中查找ID字段并返回有问题的ID行: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
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文件?是的!如果您担心将整个文件读入内存,则可以写入另一个文件。另一种方法是同时读写(以弥补额外的字节),这是非常不明智的