Python 替换所有非标题行中特定列的值
下面是一些python代码,它运行在与此类似的文件(old_file.csv)上 如何遍历旧的_file.csv中的所有行(如果我不知道文件的长度),并替换列C或索引2或单元格[row][2](基于单元格[row][col])中的所有值。但是我想忽略标题行。例如,在新的_file.csv中,所有包含“XX”的值都将变为“YY”Python 替换所有非标题行中特定列的值,python,csv,Python,Csv,下面是一些python代码,它运行在与此类似的文件(old_file.csv)上 如何遍历旧的_file.csv中的所有行(如果我不知道文件的长度),并替换列C或索引2或单元格[row][2](基于单元格[row][col])中的所有值。但是我想忽略标题行。例如,在新的_file.csv中,所有包含“XX”的值都将变为“YY” import csv r = csv.reader(open('old_file.csv')) cells = [l for l in r] cells[1][2] =
import csv
r = csv.reader(open('old_file.csv'))
cells = [l for l in r]
cells[1][2] = 'YY'
cells[2][2] = 'YY'
cells[3][2] = 'YY'
w = csv.writer(open('new_file.csv', 'wb'))
w.writerows(cells)
csv reader生成数组,因此您可以在
r[1://code>csv reader生成数组,因此您可以在r[1://code>上运行它。len(单元格)
是行数。从1开始迭代会使其跳过标题行。而且行
应该是单元格
import csv
r = csv.reader(open('old_file.csv'))
cells = [l for l in r]
for i in range(1, len(cells)):
cells[i][2] = 'YY'
w = csv.writer(open('new_file.csv', 'wb'))
w.writerows(cells)
len(cells)
是行数。从1开始迭代会使其跳过标题行。而且行
应该是单元格
import csv
r = csv.reader(open('old_file.csv'))
cells = [l for l in r]
for i in range(1, len(cells)):
cells[i][2] = 'YY'
w = csv.writer(open('new_file.csv', 'wb'))
w.writerows(cells)
您可以非常轻松地在行数组上循环并替换目标单元格中的值
# get rows from old CSV file
rows = csv.reader(open('old_file.csv'))
# iterate over each row and replace target cell
for i, row in enumerate(rows):
# ignore the first row, modify all the rest
if i > 0:
row[2] = 'YY'
# write rows to new CSV file, no header is written unless explicitly told to
w = csv.writer(open('new_file.csv', 'wb'))
w.writerows(rows)
您可以非常轻松地在行数组上循环并替换目标单元格中的值
# get rows from old CSV file
rows = csv.reader(open('old_file.csv'))
# iterate over each row and replace target cell
for i, row in enumerate(rows):
# ignore the first row, modify all the rest
if i > 0:
row[2] = 'YY'
# write rows to new CSV file, no header is written unless explicitly told to
w = csv.writer(open('new_file.csv', 'wb'))
w.writerows(rows)
只是@Soviut ans中的一点变化,试试这个我想这会对你有帮助
import csv
rows = csv.reader(open('old_file.csv'))
newRows=[]
for i, row in enumerate(rows):
# ignore the first row, modify all the rest
if i > 0:
row[2] = 'YY'
newRows.append(row)
# write rows to new CSV file, no header is written unless explicitly told to
w = csv.writer(open('new_file.csv', 'wb'))
w.writerows(newRows)
只是@Soviut ans中的一点变化,试试这个我想这会对你有帮助
import csv
rows = csv.reader(open('old_file.csv'))
newRows=[]
for i, row in enumerate(rows):
# ignore the first row, modify all the rest
if i > 0:
row[2] = 'YY'
newRows.append(row)
# write rows to new CSV file, no header is written unless explicitly told to
w = csv.writer(open('new_file.csv', 'wb'))
w.writerows(newRows)
你能具体点吗?我从来没有写过Python脚本。你问过如何忽略标题行。在您的for
循环中,不要在r
上运行,而是在r[1:][/code>上运行,您能具体说明一下吗?我从来没有写过Python脚本。你问过如何忽略标题行。在for
循环中,不要在r
上运行,而是在r[1:][/code>上运行行从何而来?应该是“cells”,其中行从何而来?应该是“cells”。请注意,这也会替换标题行中的元素,这不是您想要的。实际上,对行中的行[1://code>进行一个简单的修复就可以了。但是您必须处理空文件,否则就可能出现索引器
。实际上,对行中的行[1://code>进行一个简单的修复就可以了。但是您必须处理空文件,否则就可能出现indexeror
。其次,csv
是python的内置包,因此当您处理.csv文件时,最好使用它。我同意。谢谢但是,答案是特定于问题的,并且不一定处理所有可能的错误场景——比如一行只包含2个元素(因此,第[2]行也会引发索引器)。至于csv模块,如果使用方法像que中所描述的那样简单,我看不到使用csv模块有任何额外的好处。这里有一个shell one-liner(虽然它去掉了空行):head-1 old_file.csv&&cat old_file.csv | awk-F,-v OFS=,'NF&&NR>1{$3=“YY”;print}tee new_file.csvFirst,如果索引器位于空文件上,则此操作将失败。其次,csv
是python的内置包,因此当您处理.csv文件时,最好使用它。我同意。谢谢但是,答案是特定于问题的,并且不一定处理所有可能的错误场景——比如一行只包含2个元素(因此,第[2]行也会引发索引器)。至于csv模块,如果使用方法像que中描述的那样简单,我看不到使用csv模块有任何额外的好处。这里有一个shell one liner(虽然它去掉了空行):head-1 old_file.csv&&cat old_file.csv | awk-F,-v of s=,'NF&&NR>1{$3=“YY”;print}tee new_file.csv