使用python 3中的换行符写入文件

时间:2016-11-09 18:45:21

标签: python

您好我遇到了这个小问题,我正在从一个文件中读取一些内容,提取一些列并将其写入另一个文件。现在,因为write()方法不会在每行文本之后添加换行符,所以我通过下面的代码执行了这一操作,但是这会产生一个问题,即它会在文件的末尾添加一个额外的空白行,这是不可取的。 / p>

fh.write(string+'\n')

所以我想知道我们如何解决这个问题,下面是我的代码

with open("C:\\test.txt") as fh, open("C:\\newtest","w") as f:
    for line in fh:
        if not re.search("^$",line):
            f.write(line.split()[-1].split(",")[0]+'\n')

所以有任何建议。

3 个答案:

答案 0 :(得分:1)

如果你知道你的文件总是至少有一行,你可以简单地写第一行而不做任何更改,然后写下所有后续行,\r\n附加到字符串的开头:

with open("C:\\test.txt") as fh, open("C:\\newtest","w") as f:
    for line in fh:
        if not re.search("^$",line):
            f.write(line.split()[-1].split(",")[0]) #first line with no newline
            break #on first occurance
    for line in fh:
        if not re.search("^$",line):
            f.write('\n'+line.split()[-1].split(",")[0]) #rest of the lines with prepended newline

编辑:

为什么文件不会在第二行的第一行开始?

在幕后,对象fh有一些内部状态来有效地跟踪一个"光标"在文件中,以及一个名为fh.next()的特殊方法,此方法用于生成下一个值(在这种情况下,每行由'\n'分隔。当文件末尾达到特殊类型时异常被引发,称为StopIteration这是一个特殊的异常类型,被for循环识别,告诉它退出循环。如果使用break事先退出循环,文件中的内部游标将保持不变,进一步的迭代从你离开的地方开始。

您可以通过创建自己的自定义生成器并使用for循环遍历它来了解迭代在幕后的工作原理:

def generator_constructor():
    x = 10
    while x > 0:
        yield x
        x = x - 1 #decrement x

generator = generator_constructor()

print generator.next() #prints 10
print generator.next() #prints 9

print "\nlooping\n" #indicate where we enter the loop

while True: #infinite loop we will need to break out of somehow
    try:
        print generator.next() #print next value
    except StopIteration: #if we reach the end (exit wile loop of generator constructor)
        break #then break out of the loop

尝试使用此代码并使其更有趣,以便您了解幕后发生的事情

答案 1 :(得分:0)

with open("C:\\test.txt") as fh, open("C:\\newtest","w") as f:
    output_lines = []
    for line in fh:
        if not re.search("^$",line):
            output_lines.append(line.split()[-1].split(",")[0])
    output = '\n'.join(output_lines)
    f.write(output)

甚至

with open("C:\\test.txt") as fh, open("C:\\newtest","w") as f:
    output_lines = [ 
              line.split()[-1].split(",")[0]
              for line in fh
              if not re.search("^$",line)
         ]
    output = '\n'.join(output_lines)
    f.write(output)

答案 2 :(得分:0)

我只是解决了它,这是一个误解我想编辑器,因为我检查了空白行,我没有找到任何。

with open("C:\\test.txt") as fh, open("C:\\newtest","w") as f:
    for line in fh:
        if not re.search("^$",line):
            f.write(line.split()[-1].split(",")[0]+'\n')
fh=open("C:\\ECD Utilization Script - Copy\\newtest","r")
n=0
for line in fh:
    if  re.search("^$",line):
        n=n+1
print(n,"Blank lines")
fh.close()