我有一个.txt文件,其中仅包含一行文本。例如:
command1;\ncommand2, output;\ncommand3\ncommand4, output;\n
(但更长)。由于很难阅读,我想将此文件更改为更具可读性的版本。我想删除所有';'
并用新行替换'\n'
。
对于这个问题,我几乎没有可行的解决方案:
例如,我可以删除所有'\n'
并使用print
函数。或者,将\\n
替换为\n
:
def clean_file(file):
# read file
with open(file) as f:
content = f.readline()
# get rid of ';' and '\n'
content = content.split(';')
for ind, val in enumerate(content):
content[ind] = val.replace('\\n', '\n') # it can be also replace(r'\n', '\n')
# write to file
with open(file, 'w') as f:
for line in content:
f.write(line)
OUT:
command1
command2, output
command3
command4, output
在这种情况下,它可以正常工作! 但是我不知道为什么在删除替换零件时它不起作用:
def clean_file(file):
# read file
with open(file) as f:
content = f.readline()
# get rid of ';'
content = content.split(';')
# write to file
with open(file, 'w') as f:
for line in content:
f.write(line)
OUT:
command1\ncommand2, output\ncommand3\ncommand4, output\n
这将把所有内容打印在一行中。
有人可以向我解释为什么我必须用相同的值替换'\n'
吗?
该文件已创建,我正在Windows上打开它,但脚本正在Linux上运行。
答案 0 :(得分:1)
Windows世界中的大多数编辑器(从记事本开始)要求\r\n
才能正确显示行尾并仅忽略\n
。另一方面,在Linux上,单个\n
对于行尾就足够了。如果您在Windows上运行Python脚本,它将足够聪明,可以在写入时自动用\r\n
替换任何'\ n',并用单个{{1}对称地替换文件中的\r\n
},前提是该文件以 text 模式打开。但是在Linux上什么也不会发生。
长话短说,Linux和Windows上文本文件的行尾不同,而具有\n
的文本文件在Linux上称为 dos文本文件。
您可能已经为此感到困惑,唯一可以确定的方法是以二进制模式打开文件并显示字节值(十六进制以使习惯于ASCII码的人更容易理解)
答案 1 :(得分:0)
您没有替换相同的值,而是要删除\
之前的\n
。当处理字符串时,反斜杠通常意味着您有一个特殊的字符(例如换行符\n
,制表符\t
等),但有时您希望打印一个实际的反斜杠!为此,我们在Python中使用\\
添加一个反斜杠。
因此,在第一个示例中打印时,python到达\n
并认为“换行”,在第二个示例中python看到\\n
,因此前两个\
表示打印反斜杠,然后将n
当作普通n
对待并打印