用Python编写固定宽度,以空格分隔的CSV输出
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了用Python编写固定宽度,以空格分隔的CSV输出,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2586字,纯文字阅读大概需要4分钟。
内容图文
![用Python编写固定宽度,以空格分隔的CSV输出](/upload/InfoBanner/zyjiaocheng/694/8623b31d8edb442f87c3f07ab251fe92.jpg)
我想使用Python的csv编写器编写一个固定宽度,空格分隔和最小引用的CSV文件.
输出示例:
item1 item2
"next item1" "next item2"
anotheritem1 anotheritem2
如果我用
writer.writerow( (“{0:15s}”.format(item1), “{0:15s}”.format(item2)) )
…
然后,使用空格定界符,由于项目格式的尾部空格而添加引号或转义符(取决于csv.QUOTE_ *常数),导致格式被破坏:
"item1 " "item2 "
"next item1 " "next item2 "
"anotheritem1 " "anotheritem2 "
当然,我可以自己格式化所有内容:
writer.writerow( (“{0:15s}{1:15s}”.format(item1, item2)) )
但是使用csv编写器没有太多意义.另外,当项目中嵌入空格并且应使用引号/转义符时,我将不得不手动进行整理.换句话说,似乎我需要一个(不存在)“ QUOTE_ABSOLUTELYMINIMAL” csv常量,该常量将充当“ QUOTE_MINIMAL”,但也将忽略尾随空格.
有没有一种方法可以实现“ QUOTE_ABSOLUTELYMINIMAL”行为,或者有其他方法可以使用Python的CSV模块获取固定宽度,以空格分隔的CSV输出?
我想要CSV文件中的固定宽度功能的原因是更好的可读性.因此,它会以CSV格式进行读取和写入,但由于采用了列结构,因此可读性更好.读取不是问题,因为csv skipinitialspace选项可以忽略多余的空格.令我惊讶的是,写作似乎是一个问题.
编辑:我得出结论,用当前的csv插件无法实现.它不是一个内置选项,我看不到任何合理的方式来手动实现它,因为似乎没有办法由Python的csv编写器编写额外的定界符而不引用或转义它们.因此,我可能必须编写自己的csv编写器.
解决方法:
您遇到的基本问题是csv和固定格式基本上是数据存储的相反视图.使它们一起工作不是一种常见的做法.另外,如果您仅对带有空格的项目使用引号,则它将使这些行的对齐方式脱离:
testing "rather hmm "
strange "ways to "
"store some " "csv data "
testing testing
读回该数据也会导致错误的结果:
'testing' 'rather hmm '
'strange' 'ways to '
'store some ' 'csv data '
'testing' 'testing' ''
请注意最后一行末尾的多余字段.鉴于这些问题,我将以您为例
"item1 " "item2 "
"next item1 " "next item2 "
"anotheritem1 " "anotheritem2 "
我发现它很易读,可以使用现有的csv库轻松生成,并且在读回时可以正确解析.这是我用来生成它的代码:
import csv
class SpaceCsv(csv.Dialect):
"csv format for exporting tables"
delimiter = None
doublequote = True
escapechar = None
lineterminator = '\n'
quotechar = '"'
skipinitialspace = True
quoting = csv.QUOTE_MINIMAL
csv.register_dialect('space', SpaceCsv)
data = (
('testing ', 'rather hmm '),
('strange ', 'ways to '),
('store some ', 'csv data '),
('testing ', 'testing '),
temp = open(r'c:\tmp\fixed.csv', 'w')
writer = csv.writer(temp, dialect='space')
for row in data:
writer.writerow(row)
temp.close()
当然,您需要将所有数据填充到相同的长度,或者在执行此操作的函数之前,或者在函数本身中.哦,如果您有数字数据,还必须为此设置填充余量.
内容总结
以上是互联网集市为您收集整理的用Python编写固定宽度,以空格分隔的CSV输出全部内容,希望文章能够帮你解决用Python编写固定宽度,以空格分隔的CSV输出所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。