%s.txt'-6ren">
gpt4 book ai didi

python - python脚本中使用awk时的格式问题

转载 作者:行者123 更新时间:2023-12-01 01:37:52 26 4
gpt4 key购买 nike

我正在尝试在 python 脚本中编写以下命令:

cmd = '''awk '{printf "%.6f  %.6f  %.6f\n",$1-10.0,$2,$3}' %s.txt > %s.txt''' % (file_name_1, file_name_2)
call(cmd, shell=True)

但由于参数问题,未能执行。前三个"%.6f"是awk输出格式,后两个"%s"是文件名。我尝试在 "=" 之后添加 "r" 但不起作用。

谢谢!

最佳答案

命令中的 \n 字符不会作为 \n 传递给 awk,而是作为命令行中的换行符传递。

您需要使用原始前缀,因此 \n 按字面意思传递:

cmd = r'''awk '{printf "%.6f  %.6f  %.6f\n",$1-10.0,$2,$3}' %s.txt > %s.txt''' %  (file_name_1, file_name_2)

(是的,感谢阅读 Glenn other answer ,我发现我忘记了将 % 字符加倍,所以真的不是很方便的解决方案,除非您使用 format 代替,修复只是部分)

使用str.format和双引号(这里不需要三个单引号):

cmd = r"awk '{printf "%.6f  %.6f  %.6f\n",$1-10.0,$2,$3}' {}.txt > {}.txt".format(file_name_1, file_name_2)

更好的是,在迭代行和浮点转换上使用 openstr.split 以纯 Python 重写此代码。未经测试,但应该效果很好:

with open(file_name_1+".txt") as fr, open(file_name_2+".txt","w") as fw:
for line in fr:
toks = [float(x) for x in line.split()]
fw.write("%.6f %.6f %.6f\n" % (toks[0]-10,toks[1],toks[2]))
  • 更便携(不需要 awk,例如在 Windows 上)
  • 如果文件名中有空格,这不是问题
  • 避免系统调用

关于python - python脚本中使用awk时的格式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52212182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com