在Amazon Linux上写入txt文件时,Python'\ n'无法正常工作

时间:2018-09-24 19:47:53

标签: python-3.x amazon-ec2

我有一个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'也不会写入日志,只是被忽略而就好像它不在那里一样。

我找不到原因或解决方法,所以我可以指定在哪里添加新行。

非常感谢

1 个答案:

答案 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等。