Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用CSV编写器在分隔符后插入空格_Python_Csv - Fatal编程技术网

Python 使用CSV编写器在分隔符后插入空格

Python 使用CSV编写器在分隔符后插入空格,python,csv,Python,Csv,在上面的代码中,我尝试使用Python2.7中的csv模块加载file1.csv,然后使用csv.writer将其写入file2.csv 我的问题来自输入文件中定界符后的现有空白(单个空格字符)。我需要删除它们以便稍后进行一些数据操作,因此我使用了读取器的skipinitialspace=True参数。但是,我无法让编写器打印分隔符后面的空格字符,因此会干扰两个文件的后续diffing 我试图使用嗅探器类自动生成方言,但我猜我的输入文件(来自一个大型复杂的遗留系统,有几十个字段,引用和转义很差)

在上面的代码中,我尝试使用Python2.7中的
csv
模块加载file1.csv,然后使用
csv.writer
将其写入file2.csv

我的问题来自输入文件中定界符后的现有空白(单个空格字符)。我需要删除它们以便稍后进行一些数据操作,因此我使用了读取器的
skipinitialspace=True
参数。但是,我无法让编写器打印分隔符后面的空格字符,因此会干扰两个文件的后续
diff
ing

我试图使用
嗅探器
类自动生成
方言
,但我猜我的输入文件(来自一个大型复杂的遗留系统,有几十个字段,引用和转义很差)对于这一点来说太复杂了

更简单地说,我正在寻找以下问题的答案:

  • 如何在
    writer
    中的每个分隔符后插入空格字符
  • 顺便问一下,禁止使用多字符串作为分隔符的原因是什么
    delimiter=“;”
    会解决我的问题

如果您留下了要写入的空白(在处理过程中删除/恢复它),或者在处理后但在写入之前将其放回原处,这将解决问题。

一种解决方案是写入
StringIO
对象,然后用
替换分号;',或者在处理行的过程中执行此操作,如果您执行任何其他处理。

对于第一个,我可能会执行以下操作:

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)

至于第二个,我不知道。

您可以将
文件
对象包装在添加空白的代理中:

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

谢谢你,你的第二个建议正是我在考虑的。我只是担心这会增加额外的代码行,并想知道这到底有多像Python。我不想发现一个简单的模块选项可以帮我省去麻烦。@rahmu来自Python的禅宗:“特殊情况不足以打破规则。尽管实用性胜过纯洁性。”我喜欢它,非常聪明!谢谢^^
>>> 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'