如何在“分隔符”中给出2个字符使用'csv'模块? [英] How to give 2 characters in "delimiter" using 'csv' module?

查看:2519
本文介绍了如何在“分隔符”中给出2个字符使用'csv'模块?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 <$ c> 

$ c> import csv
ifile = open('test.csv',rb)
reader = csv.reader(ifile)
ofile = open('ttest.csv', wb)
writer = csv.writer(ofile,delimiter ='|',quotechar ='',quoting = csv.QUOTE_ALL)
读取行:
writer.writerow row)
ifile.close()
ofile.close()

 回溯(最近最后一次调用):

在< module>中的文件csvfile.py第6行
writer = csv.writer(ofile,delimiter ='@ | @',quotechar ='',quoting = csv。 QUOTE_ALL)
TypeError:delimiter必须是一个1个字符的字符串

csv.writer 参数 csv.writer / code>构造函数只需要是一个类文件对象。这意味着您可以提供一个自己的类的实例,将单个字符更改为一个包含两个或更多字符的实例(但是否则会像打开的输出文件对象一样)。



这里是我的意思:

  import csv 

class CSV_Translater(object):
输出文件类对象,翻译字符。
def __init __(self,f,old,new):
self.f = f
self.old = old
self.new = new
def write(self,s):
self.f.write(s.replace(self.old,self.new))
def close self):
self.f.close()
def flush(self):
self.f.flush()

with open('in_test.csv ',rb)asileile:
reader = csv.reader(ifile)
with open('out_test.csv',wb)as ofile:
translater = CSV_Translater ,'|','@ | @')
writer = csv.writer(translater,delimiter ='|',quotechar ='',
quoting = csv.QUOTE_ALL)
读取器中的行:
writer.writerow(row)


I'm trying to generate the csv with delimiter '@|@' but, I couldn't achieve through below code.

import csv
ifile  = open('test.csv', "rb")
reader = csv.reader(ifile)
ofile  = open('ttest.csv', "wb")
writer = csv.writer(ofile, delimiter='|', quotechar='"', quoting=csv.QUOTE_ALL)
for row in reader:
    writer.writerow(row)
ifile.close()
ofile.close()

While running, It has thrown below error.

Traceback (most recent call last):

File "csvfile.py", line 6, in <module>
writer = csv.writer(ofile, delimiter='@|@', quotechar='"', quoting=csv.QUOTE_ALL)
TypeError: "delimiter" must be an 1-character string

How can I achieve this?

解决方案

The csvfile argument to the csv.writer constructor only has to be a "file-like object". This means you could supply an instance of your own class which changes a single character into one with two or more characters (but which otherwise acts like a open output file object).

Here's what I mean:

import csv

class CSV_Translater(object):
    """ Output file-like object that translates characters. """
    def __init__(self, f, old, new):
        self.f = f
        self.old = old
        self.new = new
    def write(self, s):
        self.f.write(s.replace(self.old, self.new))
    def close(self):
        self.f.close()
    def flush(self):
        self.f.flush()

with open('in_test.csv', "rb") as ifile:
    reader = csv.reader(ifile)
    with open('out_test.csv', "wb") as ofile:
        translater = CSV_Translater(ofile, '|', '@|@')
        writer = csv.writer(translater, delimiter='|', quotechar='"',
                            quoting=csv.QUOTE_ALL)
        for row in reader:
            writer.writerow(row)

这篇关于如何在“分隔符”中给出2个字符使用'csv'模块?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆