繁体   English   中英

使用Python从文本文件中读取行的行尾字符

[英]End-line characters from lines read from text file, using Python

使用python从文本文件中读取行时,通常需要在处理文本之前截断行尾字符,如下例所示:

f = open("myFile.txt", "r")
for line in f:
    line = line[:-1]
    # do something with line

是否有一种优雅的方式或习惯用于检索没有终结字符的文本行?

在Python中执行此操作的惯用方法是使用rstrip('\\ n')

for line in open('myfile.txt'):  # opened in text-mode; all EOLs are converted to '\n'
    line = line.rstrip('\n')
    process(line)

每个其他替代方案都有一个问题:

  • file('...')。read()。splitlines()必须立即将整个文件加载到内存中。
  • 如果最后一行没有EOL, line = line [: - 1]将失败。

简单。 使用splitlines()

L = open("myFile.txt", "r").read().splitlines();
for line in L: 
    process(line) # this 'line' will not have '\n' character at the end

您的代码有什么问题? 我发现它非常优雅和简单。 唯一的问题是,如果文件没有以换行符结尾,则返回的最后一行将不会有'\\n'作为最后一个字符,因此执行line = line[:-1]会错误地删除该行的最后一个字符。

解决此问题的最优雅的方法是定义一个生成器,该生成器获取文件的行,并且只有当该字符是换行符时才从每行中删除最后一个字符:

def strip_trailing_newlines(file):
    for line in file:
        if line[-1] == '\n':
            yield line[:-1]
        else:
            yield line

f = open("myFile.txt", "r")
for line in strip_trailing_newlines(f):
    # do something with line

很久以前,有可以在16 kb核心机器上运行的亲爱的,干净的,旧的BASIC代码:像这样:

if (not open(1,"file.txt")) error "Could not open 'file.txt' for reading"
while(not eof(1)) 
  line input #1 a$
  print a$
wend
close

现在,要逐行读取文件,使用更好的硬件和软件(Python),我们必须重新发明轮子:

def line_input (file):
    for line in file:
        if line[-1] == '\n':
            yield line[:-1]
        else:
            yield line

f = open("myFile.txt", "r")
for line_input(f):
    # do something with line

我被诱导认为某些地方出现了错误的方式......

你对这种方法有什么看法?

with open(filename) as data:
    datalines = (line.rstrip('\r\n') for line in data)
    for line in datalines:
        ...do something awesome...

发生器表达避免加载整个文件到存储器中,并with确保关闭文件

您还可以考虑使用line.rstrip()来删除行尾的空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM