Direct python output to linux file
我有一个用python编写的脚本,我在Ubuntu上运行它。我希望将此命令的输出定向到文件中。
我最好使用python.py>file.txt,但是脚本有一些交互部分,如果我将输出重定向到一个文件,我将无法使用这些部分。
我试图把代码改成这个,但语法错误。我第一次真正使用python,所以请原谅我缺乏知识。
1 | print (str(kFx) + ',' + str(kFy) + ',' + str(kFz) , file=open("output.txt","a")) |
有什么办法吗?
谢谢您,亚历克斯
你可以像打开文件那样用
1 | file.write(str(kFx) + ',' + str(kFy) + ',' + str(kFz)) |
因为您在附加模式下打开了文件(在open中用"a"表示),它会将这个字符串添加到文件的末尾。您可能还需要在字符串后添加新行:
1 2 | file.write(" ") |
写完后:
1 | file.close() |
在python 3上,它看起来像:
1 2 3 | with open("output.txt","a") as file: # append to the file print(*kF, sep=', ', file=file) # etc... |
为了可读性,我在逗号后加了空格。看到**(双星)和*(星)对参数做了什么?
在python 2上,可以在脚本顶部添加
1 | print(kFx, kFy, kFz, sep=', ', file=file) |
您可以使用
1 | kF ="kFx value","kFy value","kFz value" |
或者为了可读性,可以使用
1 2 3 4 5 6 | 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') |
它支持
1 2 3 4 5 | 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上,您可以使用
为了获得更丰富的功能,您可以尝试
1 2 3 4 5 6 7 8 | #!/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包的代码示例,可以使用
将
要将其保存为JSON格式:
1 2 3 4 5 | 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"} |
如果使用WITH关键字,文件流将只在块内保持打开状态。然后你就不必记得当你结束的时候关闭它了。
1 2 3 | with open('test.output', 'w') as f: f.write('{0},{1},{2} '.format(kFx, kFy, kFz)) |
如果要附加到文件,如echo"test">>test.txt而不是echo"test">test.txt然后将打开模式改为"A"而不是"W"