CSV写入文件困难

2024-05-08 20:40:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我应该根据off条件向我的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()

我不知道为什么它会以无限循环结束。在

编辑:我犯了一个错误,我原来的无限循环程序有这样一行:

^{pr2}$

我将'a'改为'w',但这最终抹去了整个{}文件本身。所以现在我有一个不同的问题。在


Tags: or文件csvimportclosesys标签open
3条回答

我想问题出在线路上

w = open(sys.argv[1], 'w')
r = open(sys.argv[1], 'r')

您正在打开同一个文件进行读取写作。所以尝试使用不同的文件名。在

if row[2] or row[3] or row[4] == '0':和这里row[9] == 'Label'有问题,可以使用^{}检查几个等于相同值的变量,并使用=来赋值,我也建议使用^{}。在

另外,您不能在csv文件中同时读写,所以您需要将更改保存到一个新的csv文件中,您可以在之后删除原来的csv文件,然后使用^{}^{}重命名新文件:

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

您可以写入一个tempfile.NamedTemporaryFile,只需使用in来测试"0",因为您匹配的是一个完整的字符串,而不是子字符串,因此在创建三个元素的元组时,您不会通过使用any保存任何内容,这样您就可以切片或只测试成员资格,然后将原始文件替换为shutil.move

import csv
import sys    
from shutil import move
from tempfile import NamedTemporaryFile

with NamedTemporaryFile("w", dir=".", delete=False) as w, open(sys.argv[1]) as r:
    reader, writer = csv.reader(r), csv.writer(w)
    writer.writerows(row[:-1] + ['Label'] if "0" in row[2:5] else row 
                     for row in reader)

move(w.name, sys.argv[1])

sys.argv[1]也是您的文件名和一个字符串,因此您只需要传递这些。在

相关问题 更多 >