Reg*_*mal 9 python csv python-2.x file-writing python-2.7
我应该CSV根据条件为我的文件添加一个特定的标签.该CSV文件有10列,第三,第四和第五列是影响条件最多的列,我在第十列添加我的标签.我这里的代码以无限循环结束:
import csv
import sys
w = open(sys.argv[1], 'w')
r = open(sys.argv[1], 'r')
reader = csv.reader(r)
writer = csv.writer(w)
for row in reader:
if row[2] or row[3] or row[4] == '0':
row[9] == 'Label'
writer.writerow(row)
w.close()
r.close()
Run Code Online (Sandbox Code Playgroud)
我不知道为什么它会以无限循环结束.
编辑:我犯了一个错误,我原来的无限循环程序有这条线:
w = open(sys.argv[1], 'a')
Run Code Online (Sandbox Code Playgroud)
我改'a'到'w'但这最终删除整个CSV文件本身.所以现在我有一个不同的问题.
你在这里if row[2] or row[3] or row[4] == '0':和这里有一个问题row[9] == 'Label',你可以any用来检查几个等于相同值的变量,并=用来分配一个值,我也建议你使用with open.
此外,您无法在csv文件中同时读取和写入,因此您需要将更改保存到新的csv文件,您可以删除原始文件并使用os.remove和重命名新文件os.rename:
import csv
import sys
import os
with open('some_new_file.csv', 'w') as w, open(sys.argv[1], 'r') as r:
reader, writer = csv.reader(r), csv.writer(w)
for row in reader:
if any(x == '0' for x in (row[2], row[3], row[4])):
row[9] = 'Label'
writer.writerow(row)
os.remove('{}'.format(sys.argv[1]))
os.rename('some_new_file.csv', '{}'.format(sys.argv[1]))
Run Code Online (Sandbox Code Playgroud)