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