如何用Python给data.txt每行前加10个空格并生成新文件
给文件每行前加10个空格的解决办法
需求
要把data.txt里的每一行内容前面加上10个空格,生成data_copy3.txt,最终效果如下:
0.00E+00 0.00E+00 1.00E-02 1.91E-10 2.00E-02 5.97E-10 3.01E-02 2.80E-10 4.01E-02 2.58E-10
当前问题
现在用的代码只是原样复制文件内容,没实现加空格的功能:
with open("data.txt", "r") as rf: with open("data_copy3.txt", "w") as wf: for line in rf: wf.write(line)
之前试过用{:>10}格式化,但没成功在新文件里插入空格。原文件每行开头本来就没有空格,格式和上面示例去掉10个空格的样子一致。
为什么{:>10}没生效?
你之前用这个格式化方式失败,大概率是两个原因:
- 没处理每行末尾的换行符,格式化把换行也算进内容长度里了;
- 如果原行内容长度≥10,
{:>10}只会让内容右对齐,不会额外补空格。
可行方案
方案1:直接拼接10个空格(最简单可靠)
直接在每行内容前硬加10个空格,注意先去掉原行的换行符,避免出现多余空行:
with open("data.txt", "r") as rf: with open("data_copy3.txt", "w") as wf: for line in rf: # 去掉原行的换行,加10个空格后再补换行 wf.write(" " + line.rstrip("\n") + "\n")
方案2:正确使用格式化字符串
如果想用格式化的方式,需要先把换行符去掉,再按「原内容长度+10」的宽度做右对齐:
with open("data.txt", "r") as rf: with open("data_copy3.txt", "w") as wf: for line in rf: content = line.rstrip("\n") # 格式化时设置总宽度为原内容长度+10,实现前面补10个空格 formatted_line = "{:>{}s}".format(content, len(content) + 10) wf.write(formatted_line + "\n")
或者用更简洁的f-string写法:
with open("data.txt", "r") as rf: with open("data_copy3.txt", "w") as wf: for line in rf: content = line.rstrip("\n") wf.write(f"{' '}{content}\n")
内容的提问来源于stack exchange,提问作者Ali A
相关产品推荐
相关产品推荐

