Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从文件中删除最后一个elf_Python_File_Eof - Fatal编程技术网

Python 从文件中删除最后一个elf

Python 从文件中删除最后一个elf,python,file,eof,Python,File,Eof,问题我想从文件中删除eol(行尾和空行)。输入文件以文本和下线结束。我正在尝试从文件中删除eol。在文本文件中写入单词列表后,可以有多行以空行结尾,也可以输入或\n 输入文件 Testing This Wordlist With Returns Between word list 源代码 filename="input_file.txt" with open(filename, 'r') as fn: for line in fn: if line != '\

问题我想从文件中删除eol(行尾和空行)。输入文件以文本和下线结束。我正在尝试从文件中删除eol。在文本文件中写入单词列表后,可以有多行以空行结尾,也可以输入或\n

输入文件

Testing
This

Wordlist

With

Returns

Between

word list
源代码

filename="input_file.txt"
with open(filename, 'r') as fn:
    for line in fn:
        if line != '\n':
            x = line
            print x,
#with open(filename, 'w') as foo:
    #foo.write(x)
谢谢你的建议和讨论

未经测试: 测试和纠正:

import os

filename="input_file.txt"
with open(filename, 'r') as fn:
    lines = filter(None, (l.strip() for l in fn))

data = os.linesep.join(lines).rstrip()

with open(filename, 'w') as foo:
    foo.write(data)
注:

  • os.linesep
    如果您的目标是特定的内容,则可以用固定的EOL分隔符替换
  • 此方法将整个文件读入内存,然后对其进行操作,然后将操作后的数据写回文件。根据输入文件的大小,这可能是不切实际的。请参阅@KlassIvan的答案,了解内存占用较少的方法

这里有一种比剥离整个内容更有效的方法——它不会将整个文件内容放入内存中——所以对于大型文件来说也可以。这段代码缓冲空行,只在我们没有空行时打印它们。因此,最后的空行将不会被打印

prev_empty_lines = 0

with open(filename, 'r') as fn:
    for line in fn:
        if line != '\n':
            for i in xrange(prev_empty_lines):
                print '\n',
            prev_emply_lines = 0
            print line,
        else:
            prev_empty_lines += 1

最好在最后一行结尾加上
@Tichodromamuraria,而不是普通文本文件。文本就是文本;没有好的或坏的做法。是的,要在unix中合并文件,但我想删除整个内容的eol。在这种情况下,使用
rstrip
。最好使用genexpr
过滤器(无,(对于fn中的l,使用l.strip())
。这是因为
filter
创建了全新的列表,所以您要创建两次列表。谢谢@KlassIvan,更新并更新了您的备选方法。错误-名称错误:未定义名称“x”。你能检查一下吗。谢谢