Python-零填充特定位置的空白处
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python-零填充特定位置的空白处,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1971字,纯文字阅读大概需要3分钟。
内容图文
![Python-零填充特定位置的空白处](/upload/InfoBanner/zyjiaocheng/653/c2066d25493a4b39affd4cd2ab2312ac.jpg)
我有一个小问题.我有以下格式的文件:
1 2
1 2 3
1 2
1 2 3 4
2 4
代码中的值实际上代表数字(不一定是个位数),但它们可以是任何数字,也可以是浮点值.
输入文件:对于特定的行,每个数字之间用一个空格隔开(分隔符不能是空格).
我的任务:我想以一种看起来像这样的方式将空白填充为零,即以给我一个看起来像矩阵的格式填充空白:
1 2 0 0
1 2 3 0
1 2 0 0
1 2 3 4
2 4 0 0
输出文件:适用相同规则.对于特定行,每个数字仅由单个空格分隔.
使用的语言:Python(如果可能,可以是Shell)
我知道有一个称为zfill的函数,但是我认为这对我没有太大帮助.
我的解决方案:使用len和max函数找到每行的(最大长度/ 2).然后,使用split()在每行的适当位置填充零.恐怕它可能会变成肮脏的代码,并且我相信有更好的方法来完成此任务.
任何建议都欢迎.
谢谢!
解决方法:
假设myfile是打开的文件.我们使用itertools中的izip_longest遍历输入文件的列,为缺少的值填充“ 0”:
[('1', '1', '1', '1', '2'), ('2', '2', '2', '2', '4'),
('0', '3', '0', '3', '0'), ('0', '0', '0', '4', '0')]
然后,我们只需再次压缩此输出以恢复填充了零的行.这是代码:
from itertools import izip_longest
rows = [line.split() for line in myfile] # Read
rows = zip(*izip_longest(*rows, fillvalue="0")) # Add zeroes
print "\n".join(" ".join(row) for row in rows) # Write
编辑:以上(imho优雅)解决方案比幼稚的方法稍慢(8.55 usc与7.08 usc):
rows = [line.split() for line in myfile]
maxlen = max(len(x) for x in rows)
for row in rows:
print " ".join(row + ["0"] * (maxlen - len(row)))
回复:评论
如果要对齐列,最简单的方法就是修改第一种方法,因为我们已经在某一点按列排列了数字.这使查找列宽变得容易.
from itertools import izip_longest
rows = [line.split() for line in myfile]
columns = list(izip_longest(*rows, fillvalue="0"))
column_width = [max(len(num) for num in col) for col in columns]
# We make a template of the form "{0:>a} {1:>b} {2:>c} ...",
# where a, b, c, ... are the column widths:
column_template = "{{{0}:>{1}s}}"
row_template = " ".join(column_template.format(i, n) for
i, n in enumerate(column_width))
print "\n".join(row_template.format(*row) for row in zip(*columns))
内容总结
以上是互联网集市为您收集整理的Python-零填充特定位置的空白处全部内容,希望文章能够帮你解决Python-零填充特定位置的空白处所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。