我有一个用python编写的脚本,我在ubuntu上运行。我希望将此命令的输出定向到文件中。
print str(kFx) + ',' + str(kFy) + ',' + str(kFz)
我最好使用python.py> file.txt但脚本有一些交互式部分,如果我将输出重定向到文件,我将无法使用。
我尝试将代码更改为此但我收到语法错误。我第一次使用python,所以请原谅我缺乏知识。
print (str(kFx) + ',' + str(kFy) + ',' + str(kFz) , file=open("output.txt", "a"))
关于如何做到这一点的任何想法?
谢谢你, 亚历
答案 0 :(得分:1)
您可以像file=open("output.txt", "a"))
一样打开文件。然后,而不是打印,你会使用
file.write(str(kFx) + ',' + str(kFy) + ',' + str(kFz))
因为你在附加模式下打开文件(用" a"在打开时表示),它会将此字符串添加到文件的末尾。您可能还需要在字符串后面添加一个新行:
file.write("\n")
写完后:
file.close()
答案 1 :(得分:0)
如果使用with-keyword;文件流只会在块内保持打开状态。然后你不必记得在完成后关闭它。
with open('test.output', 'w') as f:
f.write('{0},{1},{2}\n'.format(kFx, kFy, kFz))
如果您打算附加到文件,如echo“test”>> test.txt而不是echo“test”>的test.txt 然后只需将打开模式更改为“a”而不是“w”
答案 2 :(得分:0)
在Python 3上,它可能看起来像:
with open("output.txt", "a") as file: # append to the file
print(*kF, sep=', ', file=file)
# etc...
为了便于阅读,我在逗号之后添加了空格。见What does ** (double star) and * (star) do for parameters?
在Python 2上,您可以在脚本顶部添加from __future__ import print_function
并手动转换为字符串", ".join(map(str, kF))
或只是:
print(kFx, kFy, kFz, sep=', ', file=file)
您可以使用kF
对象代替kFx
,kFy
,kFz
,例如,元组/列表:
kF = "kFx value", "kFy value", "kFz value"
或者为了便于阅读,您可以use collections.namedtuple
创建自定义类:
from collections import namedtuple
Point3D = namedtuple("Point3D", "x y z")
kF = Point3D("kFx value", "kFy value", "kFz value")
# -> Point3D(x='kFx value', y='kFy value', z='kFz value')
它支持kF.x
,kF.y
,kF.z
语法。如果您需要一个可变对象,可以use types.SimpleNamespace
:
from types import SimpleNamespace
kF = SimpleNamespace(x="kFx value", y="kFy value", z="kFz value")
kF.x += " modified"
# -> namespace(x='kFx value modified', y='kFy value', z='kFz value')
在Python 2上,您可以使用class Point3D: pass
部分模拟它。
要获得更丰富的功能,您可以try attrs
package:
#!/usr/bin/fades
import attr # fades.pypi attrs
Point3D = attr.make_class("Point3D", ["x", "y", "z"])
kF = Point3D("kFx value", "kFy value", "kFz value")
kF.x += " modified"
# -> Point3D(x='kFx value modified', y='kFy value', z='kFz value')
要运行这个以及需要PyPI第三方Python包的其他代码示例,您可以use fades
for convenience(安装,运行:sudo apt-get install fades
)。虽然没有必要,但您可以手动安装依赖项:pip install attrs
(确保使用与python
相同的pip
可执行文件运行脚本:head -1 $(command -v pip)
)。< / p>
将kF
打印到文件:
print(*attr.astuple(kF), sep=', ', file=file)
# -> kFx value modified, kFy value, kFz value
以JSON格式保存:
import json
with open("kF.json", "w", encoding='utf-8') as json_file: # overwrite the file
json.dump(attr.asdict(kF), json_file)
# -> {"x": "kFx value modified", "y": "kFy value", "z": "kFz value"}