文本文件中的Python EOL问题

时间:2016-06-04 20:09:38

标签: python windows text eol linefeed

G'day all, 我有一个文本文件,它是从地理信息系统(GIS)应用程序(名称为版主)的注释字段中提取的。我需要解析这个文本并生成一个漂亮的报告。文本具有以回车/换行(x0D / x0A)终止的单独行。但是,某些行在文本正文中包含换行符。不确定这是怎么发生的。原因无关紧要。我只需要处理。我的文字看起来像这样(数据已更改,但基本想法相同) -

  

这是第01行   这是第02行   这是第03行   并且它包含03字符串后的换行符
  这是第04行

我无法在这篇文章中正确表示文本文件,因为我的剪切和帖子正在剥离CR / LF,但每个“0行”后面都有CR / LF?串。此发布机制不允许附加文件或我附加此短文本文件。 我需要将每一行读取到CR / LF并将其打印出来。 第1行和第2行打印正常。 第3行打印到第03页。 所以,当我用以下代码片段阅读本文时 -

import sys
import os

if __name__ == '__main__':

    if sys.version_info >= (3, 0):
        print ("script: EOL_Python_test.py");
        print ("Python version:  " + str(sys.version_info));
        # vars
        input_file = r"EOL_test_file.txt";
        input_data_line = "";
        line_number = 0;
        output_line = "";
        # end vars def

        if os.path.isfile(input_file):
            output_line = "processing file:  " + input_file + "\n";
            print (output_line);
            original_file = open(input_file)
            input_data_line = original_file.readline().strip("\r\n")
            while input_data_line != "":
                line_number = line_number + 1;
                output_line = "line #:" + str(line_number) + "  " + \
                    str(input_data_line);
            print (output_line)
            input_data_line = original_file.readline().strip("\r\n")
            # regex for replacing EOL with newline? "\r\n?|\n"
            original_file.close();
    else:
        print ("must run on Python 3+, now exiting...");
        exit;

除第3行和第4行外,所有内容都打印正常。第3行将第3行打印到换行符。第4行打印第3行的剩余部分。程序然后继续,向行计数变量添加额外的行,当然,打印太多行。

那么......为什么Python在读取文本文件时会在换行符和carraige返回/换行组合中断? 有没有办法在发出readlines()调用之前删除换行符?使用正则表达式?

想法? ty,Glen

1 个答案:

答案 0 :(得分:1)

您可以尝试从整个文件中创建一个字符串,然后将其拆分为' \ r \ n':

input_data = original_file.read().split('\r\n')
for line in input_data:
    ...

但请记住,它不适用于大文件。