f = open("file1.csv", "r")
g = open("file2.csv", "w")
a = csv.reader(f, delimiter=";", skipinitialspace=True)
b = csv.writer(g, delimiter=";")
for line in a:
b.writerow(line)
在上面的代码中,我尝试使用Python2.7中的csv
模块加载file1.csv,然后使用csv.writer
将其写入file2.csv。
我的问题来自输入文件中分隔符后面的现有空格(单个空格字符)。我需要删除它们以便稍后进行一些数据操作,所以我使用了skipinitialspace=True
参数给读者。但是,我无法让编写器在分隔符后打印空格字符,因此会干扰两个文件的后续diff
。
我尝试使用Sniffer
类自动生成Dialect
,但我想我的输入文件(来自大型复杂的遗留系统,包含数十个字段,引用和转义不佳)事实证明这太复杂了。
用更简单的术语来说,我正在寻找以下问题的答案:
writer
?delimiter="; "
会解决我的问题。答案 0 :(得分:2)
您可以将file
个对象包装在添加空格的代理中:
>>> class DelimitedFile(file):
... def write(self, value):
... super(DelimitedFile, self).write(value.replace(";", "; "))
...
>>> f = DelimitedFile("foo", "w")
>>> f.write("hello;world")
>>> f.close()
>>> open("foo").read()
'hello; world'
答案 1 :(得分:1)
如果你留下你想写的空格(在处理过程中删除/恢复它),或者在处理之后但在写之前把它放回去,那就可以解决它。
答案 2 :(得分:0)
一种解决方案是写入StringIO
对象,然后用'; '
替换分号,或者在处理行时执行此操作,如果您执行任何其他处理。
答案 3 :(得分:0)
至于第一个,我可能会做这样的事情:
for k, line in enumerate(a):
if k == 0:
b.writerow(line)
else:
b.writerow(' ' + line) #assuming line is always a string, if not just use str() on it
至于第二个,我不知道。