我第一次只写了几个月的python
Seconly,我有一个需要处理的txt文件。为了正确处理它,每行必须以'\ r \ n'结尾。
然而,情况并非总是如此,有时它包含'\ n'(换行符)。
因此,我需要检查文件,如果缺少'\ r \ n',请用'\ r \ n'替换'\ n'。
我尝试了几种方法但都失败了。
首先我尝试了以下内容:
with open("initial_file.txt",'rb') as file_content:
#1253 is a Windows code page used to write modern Greek.
mycon = file_content.read().decode('cp1253')
if (mycon.count("\r\n") == 0) and (mycon.count("\n") > 0):
with open("destination_file.txt",'w') as file_replace:
file_replace.write(mycon.replace("\n", "\r\n").encode('cp1253'))
但不是用'\ r \ n'替换'\ n',而是'\ r \ n \ n \ n'来获取。\ / p>
所以我尝试了另一种方法:
rf = open("initial_file.txt", 'rb')
wf = open("destination_file.txt",'wb')
mycon = rf.read().decode('cp1253')
if (mycon.count('\r\n') == 0) and (mycon.count('\n') > 0):
for line in rf:
newline = line.rstrip('\n')
wf.write(newline).encode('cp1253')
wf.write('\r\n').encode('cp1253')
它第一次工作然后没有。
我不确定我做错了什么,我能得到一些帮助。
答案 0 :(得分:3)
没有编码舞蹈,
with open("file.txt") as rf, open("out.txt", "w") as wf:
for line in rf:
wf.write("%s\r\n" % line.strip())
语境管理者很酷,不是他们。
答案 1 :(得分:2)
您可以使用open中的io
module功能。在那里,您可以明确指定换行模式。在此示例中,每个'\n'
都会转换为'\r\n'
:
from io import open
with open("test.txt", "w+", newline="\r\n") as f:
f.write(u"Hello World\n")
以下是文件内容(0d 0a
对应\r\n
:
$ hexdump -C test.txt
00000000 48 65 6c 6c 6f 20 57 6f 72 6c 64 0d 0a |Hello World..|
要将现有文件转换为使用特定的行终止模式,您可以在利用universal newlines方法的同时阅读这些行。然后,您可以使用显式指定的行终止符为输出文件编写行。
from io import open
with open(infname, 'r') as inf, open(outfname, "w+", newline="\r\n") as outf:
outf.writelines(inf)
供参考:
答案 2 :(得分:0)
您正在以二进制模式读取输入,但是以文本模式写入输出。文本模式自动将换行符转换为特定于平台的换行符序列。由于CP1253具有与ascii和unicode相同的换行符和回车符,因此您可以完全删除字符串替换代码和编码/解码代码。如果不是这种情况,您可能希望以二进制模式打开输出或进行其他更改。
with open("file.txt", 'rb') as rf, open("out.txt", "w") as wf:
wf.writelines(rf)