Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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 替换所有非标题行中特定列的值_Python_Csv - Fatal编程技术网

Python 替换所有非标题行中特定列的值

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] =

下面是一些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] = '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