我有一个Python脚本,该脚本使用以下代码将a写入txt日志文件:
with open('folder/log_{}.txt'.format(today), "a") as text_file:
text_file.write(text_to_write)
text_to_write通常是一个字符串,其中包含“ \ n”以开始新行。
在我的Windows计算机上本地运行脚本时,它工作正常。但是,在Amazon Linux实例上运行它时,它将忽略'\ n',并且所有text_to_write都在同一行上。 '\ n'也不会写入日志,只是被忽略而就好像它不在那里一样。
我找不到原因或解决方法,所以我可以指定在哪里添加新行。
非常感谢
答案 0 :(得分:1)
这真的很奇怪。
但是无论如何,由于要编写文本文件,因此应指定字符编码:
text_to_write = "hello\n"
with open(path, mode="a", encoding="utf-8") as text_file:
text_file.write(text_to_write)
但是您也可以使用记录器。在主要功能中,您可以初始化日志记录配置。例如,您可以使用基本配置:
import logging
logging.basicConfig(level=logging.INFO,
filename=path)
当然,可以从INI
文件中读取此配置。
然后在每个模块中,您都可以定义一个记录器并像这样使用它:
LOG = logging.getLogger(__name__)
LOG.info("hello")
结果是这样的:
INFO:module_name:hello
对于文本流,Python使用universal newline的概念:
通用换行符 一种解释文本流的方式,其中将以下所有内容识别为行尾:Unix行尾约定'\ n',Windows约定'\ r \ n'和旧的Macintosh约定'\ r '。
如果要在Linux系统上编写Windows特定的文本文件,则需要将换行符强制为'\ r \ n',可以这样操作:
with open(path, mode="a", encoding="utf-8", newline="\r\n") as text_file:
text_file.write(text_to_write)
但是,通常这是一种不好的做法……您会明白为什么会吼叫……
Microsoft记事本不是很聪明:它不能正确处理Unix文本文件,因为它不能像换行符那样识别'\ n',因此每一行都连接在一起并且看起来像一行文本。
我建议您安装著名的Notepad++,它是一个智能工具,可以在打开文件时自动检测换行符样式。您也可以使用它进行更改。
所以,我的建议是使用通用换行符并安装一个好的工具,例如Notepad ++或Sublime Text等。