直接python输出到linux文件

时间:2017-03-07 21:26:51

标签: python linux

我有一个用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"))

关于如何做到这一点的任何想法?

谢谢你, 亚历

3 个答案:

答案 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对象代替kFxkFykFz,例如,元组/列表:

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.xkF.ykF.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"}