我试图用分隔符生成csv' @ | @'但是,我无法通过以下代码实现。
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()
在跑步时,它已经低于错误。
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
我怎样才能做到这一点?
答案 0 :(得分:1)
在csv documentation中他们说
用于分隔字段的单字符字符串。它默认为','。
所以你可以这样做。
csv.reader((line.replace('@|@', '|') for line in ifile), delimiter='|')
所以完整的代码是,
import csv
ifile = open('test.csv', "rb")
reader = csv.reader((line.replace('@|@', '|') for line in ifile), delimiter='|')
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()
答案 1 :(得分:1)
生命太短暂,只需使用pandas
import pandas as pd
df.to_csv('output.csv', sep='|')
默认情况下,定界符为','
,这就是它被称为Commasv的原因。但是,通过将sep
更改为'|'
,您可以轻松实现您想要的效果。
答案 2 :(得分:0)
csv.writer
构造函数的 csvfile 参数只需要是一个&#34;类似文件的对象&#34;。这意味着您可以提供自己的类的实例,该实例将单个字符更改为具有两个或更多字符的字符(但其他方式则类似于打开的输出文件对象)。
这就是我的意思:
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)