使用csv writer时从迭代器中删除双引号

时间:2014-06-20 06:07:05

标签: python csv double-quotes

我想通过拆分行来从现有的csv创建一个csv。

输入csv:

A,R,T,11,12,13,14,15,21,22,23,24,25

输出csv:

A,R,T,11,12,13,14,15
A,R,T,21,22,23,24,25

到目前为止,我的代码如下:

def update_csv(name):
    #load csv file
    file_ = open(name, 'rb')
    #init first values
    current_a = ""
    current_r = ""
    current_first_time = ""
    file_content = csv.reader(file_)
    #LOOP
    for row in file_content:
        current_a = row[0]
        current_r = row[1]
        current_first_time = row[2]
        i = 2 
        #Write row to new csv
        with open("updated_"+name, 'wb') as f:
            writer = csv.writer(f)
            writer.writerow((current_a,
                             current_r,
                             current_first_time,
                             ",".join((row[x] for x in range(i+1,i+5)))
                             ))
            #do only one row, for debug purposes
            return

但该行包含双引号,我无法摆脱:

A002,R051,02-00-00,"05-21-11,00:00:00,REGULAR,003169391"

我尝试使用writer = csv.writer(f,quoting=csv.QUOTE_NONE)并获得了_csv.Error: need to escape, but no escapechar set

删除这些引号的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

我认为你可以简化逻辑,将每一行分成两行:

def update_csv(name):
    with open(name, 'rb') as file_:
        with open("updated_"+name, 'wb') as f:
            writer = csv.writer(f)
            # read one row from input csv
            for row in csv.reader(file_):
                # write 2 rows to new csv
                writer.writerow(row[:8])
                writer.writerow(row[:3] + row[8:])

答案 1 :(得分:0)

writer.writerow期望迭代,以便它可以将iterable中的每个项目作为一个项目(由适当的分隔符分隔)写入文件。所以:

writer.writerow([1, 2, 3])

会将"1,2,3\n"写入文件。

您的调用为其提供了一个可迭代的,其中一个项是已包含分隔符的字符串。因此,它需要一些方法来逃避分隔符或引用该项目的方法。例如,

write.writerow([1, '2,3']) 

不仅仅是"1,2,3\n",而是'1,"2,3"\n' - 字符串在输出中计为一个项

因此,如果你想在输出中没有引号,你需要提供一个转义字符(例如'/')来标记不应该被计算的分隔符(给出{{1}之类的内容})。

但是,我认为您实际想要做的是将所有这些元素作为单独的项目包含在内。 不要 "1,2/,3\n"他们自己,尝试:

",".join(...)

writer.writerow((current_a, current_r, current_first_time, *row[i+2:i+5])) 中的相关项目作为元组中的单独项目提供。

相关问题