我正在尝试在python脚本中编写以下命令:
css
但是由于参数问题而无法执行。前三个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)
用于awk输出格式,后两个"%.6f"
用于文件名。我试图在"%s"
之后添加"r"
,但是它不起作用。
谢谢!
答案 0 :(得分:1)
命令中的\n
字符不是作为awk
而是作为换行符传递给\n
的。
您需要使用原始前缀,以便按原样传递\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)
更好的是,在迭代行和浮点转换上使用open
,str.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
,答案 1 :(得分:1)
您需要将格式字符串中的%
加倍,才能在结果字符串中插入文字百分比字符
cmd = r'''awk '{printf "%%.6f %%.6f %%.6f\n",$1-10.0,$2,$3}' %s.txt > %s.txt''' % (file_name_1, file_name_2)
# ......................^^.....^^.....^^
如:
$ python
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> file_name_1 = 'foo'
>>> file_name_2 = 'bar'
>>> cmd = '''awk '{printf "%.6f %.6f %.6f\n",$1-10.0,$2,$3}' %s.txt > %s.txt''' % (file_name_1, file_name_2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: float argument required, not str
>>> cmd = r'''awk '{printf "%%.6f %%.6f %%.6f\n",$1-10.0,$2,$3}' %s.txt > %s.txt''' % (file_name_1, file_name_2)
>>> cmd
'awk \'{printf "%.6f %.6f %.6f\\n",$1-10.0,$2,$3}\' foo.txt > bar.txt'